1

特定の文字列を受け取り、それを特定の形式と比較するコードを作成しようとしています。これは私が使用しているものです:

private static readonly Regex phoneNumber = new Regex(@"\d{3}-\d{3}-\d{4}");

public static bool VerifyPhoneNumber(string pNumber)
{
    return phoneNumber.IsMatch(pNumber);
}

形式は000-000-0000、であり、と比較するとtrueを返します555-555-5555MessageBox表示用pNumberphoneNumber比較用もあります。メッセージボックスには次のものが表示されますpNumber = 555-555-5555phoneNumber = \d{3}-\d{3}\d{4}

しかし、それは私が望むフォーマットではありません。この形式(000)000-0000を使用したい。この形式を使用するために、phoneNumberを次のように変更しました。

private static readonly Regex phoneNumber = new Regex("(" + @"\d{3}" +  ")" + @"\d{3}-\d{4}");

しかし、このコードを実行して比較(555)555-5555すると、falseが返されます。このMessageBoxためのは次のように表示されます:pNumber = (555)555-5555およびphoneNumber = (\d{3})\d{3}-\d{4}

Regex今、私はこの問題を自分で修正するのに十分なことをまだ知りません。これまでの私の調査によると、()が問題を引き起こしています。()は正規表現に使用され、ダッシュは使用されないためだと思います。したがって、ダッシュは何も台無しにしません。私の質問は、自分のニーズに合わせてコードを変更するにはどうすればよいですか?どうすれば問題なくコードで()を取得できますか?

4

2 に答える 2

4

\(とで括弧をエスケープします\)

private static readonly Regex phoneNumber = new Regex(@"\(\d{3}\)\d{3}-\d{4}");
于 2013-01-02T20:35:39.840 に答える
3

「(」は正規表現に特別です。文字通りの括弧と一致させる場合は、前に円記号が付いていることを確認してください。

于 2013-01-02T20:35:53.070 に答える