2012-04-06 89 views
9

我想检查输入字段是否具有属性“模式”,如果是这样,执行正则表达式检查aganst说pattern.I知道这已经完成了HTML5,但我想要处理该事件我。我收到此错误:遗漏的类型错误:对象A-ZA-Z有没有方法 '测试'jquery正则表达式验证

///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:

<div> 
    <input class="formInput" name="First Name" pattern="^[A-Za-z_-][A-Za-z0-9_-]*$" type="text" id="frmFirst" min="2" maxlength="30" required="required"/> 
    <span>First Name</span> 
</div> 

回答

21

通常用javascript/jquery处理正则表达式,如

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

它看起来与我的代码已经做的一样。除了从变量传递模式 – user1265533 2012-04-06 04:13:40

+0

是的它看起来像是一样的,对于正则表达式,您需要将模式放在/ [pattern] /例如/ test /中以便与值测试匹配。 – irfanmcsd 2012-04-06 04:19:11

0

字符串不是RegExp对象。 你可以使用这样的:

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

还是没有运气.. – user1265533 2012-04-06 13:02:58

4

正如已经被别人你需要使用的对象,而不是通过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")); 

遗漏的类型错误:对象A-ZA-Z有没有方法“测试”错误将消失

...但你的验证仍然不能很好地工作。你的条件逻辑说,如果正则表达式测试返回true,则处理错误:

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

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

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

这应该为你工作。

3

你可以尝试这样的事情。它会提醒“var2失败”。

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"); 
} 
0

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

 var emailReg = new RegExp(/^([A-Z0-9.%+-][email protected]@[A-Z0-9.-]+.[A-Z]{2,6})*([,;][\s]*([A-Z0-9.%+-][email protected]@[A-Z0-9.-]+.[A-Z]{2,6}))*$/i); 
     var emailText = $('#email').val(); 

     if (!emailReg.test(emailText)) { 
      alert('Wrong Email Address\Addresses format! Please reEnter correct format'); 
      return false; 
     } 
    } 
+0

jquery在任何地方都是一样的。 你只需要将它应用到你想要验证这个jQuery表达式的文本框或输入字段。 – 2016-01-20 19:19:05