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