jQuery 正则表达式验证

Posted

技术标签:

【中文标题】jQuery 正则表达式验证【英文标题】:Jquery RegEx Validation 【发布时间】:2012-04-19 19:16:47 【问题描述】:

我想检查输入字段是否具有“模式”属性,如果是,则执行正则表达式检查以表示模式。我知道这已经由 html5 完成,但我想自己处理该事件。我收到此错误:Uncaught TypeError: Object a-zA-Z has no method '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:

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

【问题讨论】:

在 HTML 部分设置模式不是一个好的解决方案,因为任何人都可以绕过它而无需任何检查。所以,你应该直接在js中检查模式是否匹配。 【参考方案1】:

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

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

【讨论】:

这似乎是我的代码已经做的事情。除了模式是从变量传递的 是的,它看起来一样,对于正则表达式,您需要将模式包含在 /[pattern]/ 例如 /test/ 以匹配值测试。【参考方案2】:

正如其他人已经提到的,您需要使用对象而不是 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: Object a-zA-Z has no method 'test'错误将消失

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

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

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

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

这应该适合你。

【讨论】:

【参考方案3】:

你可以试试这样的。它会提示“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");

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

      var emailReg = new RegExp(/^([A-Z0-9.%+-]+@@[A-Z0-9.-]+.[A-Z]2,6)*([,;][\s]*([A-Z0-9.%+-]+@@[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;
        
    

【讨论】:

Jquery 在任何地方都是一样的。您只需将其应用于您希望针对此 jquery 表达式进行验证的文本框或输入字段。

以上是关于jQuery 正则表达式验证的主要内容,如果未能解决你的问题,请参考以下文章

jquery.validation自定义正则表达式验证

jquery正则表达式验证:验证纯中文

包含的 JQuery 验证正则表达式

jQuery 正则表达式验证

jQuery验证日期的正则表达式(这种格式2015-07-03 14:24)

使用 jquery 验证插件,如何在文本框上添加正则表达式验证?