12

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

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

5 回答 5

28

通常带有 javascript / jquery 句柄的正则表达式

var reg = /pattern/;
if (reg.test($(this).val())) {
    // perform some task
}
于 2012-04-06T04:03:29.793 回答
4

You can try something like this. It will alert "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");
}
于 2013-04-26T16:11:06.303 回答
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"));

Uncaught TypeError: Object a-zA-Z has no method 'test'错误将消失

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

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

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

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

这应该适合你。

于 2013-04-17T07:39:38.197 回答
0

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

var reg = new RegExp($(this).attr("pattern"));
于 2012-04-06T04:17:59.373 回答
0

下面是在 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;
        }
    }
于 2015-12-22T19:07:48.877 回答