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 正则表达式验证的主要内容,如果未能解决你的问题,请参考以下文章