【发布时间】:2013-12-09 12:39:09
【问题描述】:
我在使用 Regex 进行自定义验证时遇到问题。
我有这个不显眼的方法:
jQuery.validator.addMethod("isRegex", function (value, element, params) {
if (value.length < 1) return true;
var re = new RegExp(params.regex);
var match = re.exec(value);
return match;
});
起初我使用这个正则表达式来验证电子邮件表单字段:
^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$
该事件将被触发“onkeyup”,起初它会起作用,但如果电子邮件地址太长,则会导致浏览器挂起,唯一的恢复方法是重新启动浏览器。这发生在 IE 和 chrome 上,但也可能发生在 Firefox 上。
因此,例如输入“test@test.com”就可以了。 “testtesttest@ttest.com”也可以正常工作,但“testtesttesttesttesttest@ttest.com”会挂在最后一个字母上。
起初我认为正则表达式可能是一个无能的表达式,导致无限循环或锁定,所以我将其更改为简单的:
^.+@.+\..+$
部分成功,我可以输入更长的电子邮件地址,但它最终仍然挂起。
然后我想我应该禁用 onkeyup 事件,也许只是验证模糊,为此我使用了:
$("#divEmail input[data-val-fieldregex]").keyup(function () { return false; });
现在keyup被禁用但浏览器挂在模糊上,所以这意味着代码:
var re = new RegExp(params.regex);
var match = re.exec(value);
必须无法处理大值。
有什么想法吗?
【问题讨论】:
标签: regex asp.net-mvc-4 jquery-validate unobtrusive-validation