0

ASP.Net MVCを使用して、文字列に2つを超える数値がどのような形式でも含まれないことを検証しています。

次のサーバー側コードを使用しています。

[RegularExpression(@"[^\d]*\d?[^\d]*\d?[^\d]*",ErrorMessage = "More than 2 Numbers are not allowed")]

これはうまく機能しますが、次のJavaScriptコードは常に次を返し0ます。

>> var mystring = "test123"; 
>> var myregax = new RegExp("[^\d]*\d?[^\d]*\d?[^\d]*"); 
>> mystring.search(myregax); 
0 
>> mystring = "test"; 
"test" 
>> mystring.search(myregax); 
0 

何が欠けていますか?ASP.NetとJavaScriptの正規表現構文の違いは何ですか?

4

3 に答える 3

3

オブジェクトを使用 して、パターン内でRegExpエスケープする必要があります\

new RegExp("[^\\d]*\\d?[^\\d]*\\d?[^\\d]*"); 

または、代わりに、この構文を使用します

var myregax = /[^\d]*\d?[^\d]*\d?[^\d]*/;
于 2012-09-27T12:25:53.877 に答える
1

完全に正しいFabrizioCalderanの答えに加えて、を使用していsearch()ます。

search()0文字列全体が正規表現と一致するため、最初の一致の開始インデックスを返します。代わりに呼び出す必要がtest()あります。これは、正規表現が一致するかどうかに関係なくブール値を返します。

編集:このような正規表現:

/\D*\d{1}\D*\d{1}\D*/

true2つ以上の数字があるものはすべて返されるため、条件は次のようになります。

if (/\D*\d{1}\D*\d{1}\D*/.test(string)) {
    // 2 or more numbers, validation failed
} else {
    // less than 2 numbers, validation passed
}
于 2012-09-27T12:52:03.157 に答える
0
var mystring = "test123";
var filter=/[^\d]*\d?[^\d]*\d?[^\d]*/
if(filter.test(mystring)) {
alert("true");
} else {
alert("false");
}
于 2012-09-27T12:32:54.590 に答える