0

^[0-9()- ]+$電話番号を検証するための正規表現として使用しています。基本的に、数字、ハイフン、および両方の中かっこのみを許可したい( ) 。

これをモデル レベル属性 (MVC3.0) に追加しました。有効な文字列 (5299912548 など) を指定した後、それは受け入れられますが、ビューでは " parsing "^[0-9()- ]+$" - [xy] range in reverse order.としてエラーがスローされます。

使用されている正規表現に問題がありますか、それとも他の MVC3 のものに問題がありますか?

4

2 に答える 2

3
^[0-9()\- ]+$

ハイフンをエスケープする必要があります。それ以外の場合は範囲​​インジケーターです。

これを行うこともできます:

^[0-9() -]+$

ハイフンとスペースが入れ替わっています。以前、正規表現でのハイフンの配置に悩まされていました。このような状況では、位置をシャッフルする必要がある場合があります。

これがなぜなのか、誰かが私に教えてくれるなら、私はそれを感謝します。

しかし、これでこの問題は解決します。

編集:

研究は答えを明らかにします。正規表現のいくつかのフレーバーでは、ハイフンを最初または最後にして、文字どおりに解釈することができます。

于 2012-08-16T12:36:25.990 に答える
0

問題はこの部分にあります:

[/-.] 

これは「'/' から '.' までの文字の範囲」を意味しますが、'/' は '.' の後に来ます。Unicode では、範囲は意味をなさない。

「スラッシュ、ダッシュ、またはピリオド」を意味する場合は、次のようにします。

[/\-.]

つまり、ダッシュをエスケープする必要があります。これが通常の C# 文字列リテラルにある場合は、別のレベルのエスケープも実行する必要があることに注意してください。

string pattern = "[/\\-.]";

逐語的な文字列リテラルを使用すると、バックスラッシュをエスケープする必要がなくなります。

string pattern = @"[/\-.]";

または、ダッシュを最初に置くこともできます。

[-/.]

または終了:

[/.-]
于 2012-08-16T12:45:03.057 に答える