相同的RegEx验证适用于服务器端,但不适用于客户端

时间:2012-09-27 12:25:07

标签: javascript asp.net regex validation

我正在使用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的正则表达式语法有什么区别?

3 个答案:

答案 0 :(得分:3)

使用RegExp对象,您必须转义模式中的\

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

或者,或者,使用此语法

var myregax = /[^\d]*\d?[^\d]*\d?[^\d]*/;

答案 1 :(得分:1)

除了Fabrizio Calderan的回答,这是完全正确的,你使用的是search()

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

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

/\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
}

答案 2 :(得分:0)

var mystring = "test123";
var filter=/[^\d]*\d?[^\d]*\d?[^\d]*/
if(filter.test(mystring)) {
alert("true");
} else {
alert("false");
}