【问题标题】:Jquery RegEx ValidationjQuery 正则表达式验证
【发布时间】: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中检查模式是否匹配。

标签: jquery regex validation


【解决方案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 表达式进行验证的文本框或输入字段。