Jquery RegExvalidation

我想检查输入字段是否具有属性“pattern”,如果是,则执行正则表达式检查aganst所述模式。我知道这已经由HTML5完成,但我想自己处理该事件。 我收到此错误: 未捕获的TypeError:对象a-zA-Z没有方法’test’

///Check Perform Reg/////////////////////////////////////////////////////// if ($(this).attr("pattern")) { var reg = $(this).attr("pattern"); var currentValue = $(this).val(); if (reg.test(currentValue)) { $(this).after($error.clone().text("Invalid Input.Try Again.")); $(".error:hidden").fadeIn("slow"); hasError = true; return false; } } /////////////////////////////////////////////////////////////////////////// 

仍然没有运气,

这里也是我的HTML:

 
First Name

通常使用javascript / jquery句柄正则表达式

 var reg = /pattern/; if (reg.test($(this).val())) { // perform some task } 

正如其他人已经提到的,你需要使用一个对象而不是jQuery attr()方法返回的字符串。 你可以在这里看到两者之间的区别。

将返回“字符串”:

 var reg = $(this).attr("pattern"); console.log(typeof reg) 

将返回“对象”:

 var reg = new RegExp($(this).attr("pattern")); console.log(typeof reg); 

所以,如果你更换:

 var reg = $(this).attr("pattern"); 

附:

 var reg = new RegExp($(this).attr("pattern")); 

Uncaught TypeError:对象a-zA-Z没有方法’test’错误将消失

…但你的validation仍然不会很好。 您的条件逻辑表示如果正则表达式测试返回TRUE,则处理错误:

 if (reg.test(currentValue)) { //error handling } 

相反,如果测试返回FALSE,它应该处理错误:

 if (!reg.test(currentValue)) { //error handling } 

这应该适合你。

你可以尝试这样的事情。 它会警告“var2 failed”。

 var var1 = "1"; var var2 = "A"; var myRegEx = new RegExp('[0-9]+'); //make sure the var is a number if (var1 != myRegEx.exec(var1)) { alert("var1 failed"); } if (var2 != myRegEx.exec(var2)) { alert("var2 failed"); } 

字符串不是RegExp对象。 你可以使用类似的东西:

 var reg = new RegExp($(this).attr("pattern")); 

下面是使用MVC中的Jquery基于正则表达式validation文本框的正确方法。 请注意,此表达式用于在一个字符串中validation多个电子邮件地址:

  var emailReg = new RegExp(/^([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[AZ]{2,6})*([,;][\s]*([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[AZ]{2,6}))*$/i); var emailText = $('#email').val(); if (!emailReg.test(emailText)) { alert('Wrong Email Address\Addresses format! Please reEnter correct format'); return false; } }