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

除了完全正确的 Fabrizio Calderan 的回答之外,您正在使用search().

search()返回第一个匹配的起始索引,这是0因为整个字符串与正则表达式匹配。您应该test()改为调用,如果正则表达式匹配或不匹配,它将返回一个布尔值。

编辑:像这样的正则表达式:

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

将返回true具有两个或更多数字的任何东西,因此您的条件是:

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 回答