Javascript 键入时验证电子邮件
我想在键入时验证输入,因此我使用onkeyup事件来验证输入,但如果我验证电子邮件正则表达式“name@domain.com“,一旦用户开始键入,它将抛出一个错误-第一个字符与regex不匹配 所以我写了这个:Javascript 键入时验证电子邮件,javascript,regex,validation,Javascript,Regex,Validation,我想在键入时验证输入,因此我使用onkeyup事件来验证输入,但如果我验证电子邮件正则表达式“name@domain.com“,一旦用户开始键入,它将抛出一个错误-第一个字符与regex不匹配 所以我写了这个: var addValidation = function (patterns) { var index = patterns.length; //I know I can avoid this while (index--) { p
var addValidation = function (patterns) {
var index = patterns.length; //I know I can avoid this
while (index--) {
patterns[index] = new RegExp(patterns[index]);
}
index = 0;
var current = patterns[index],
matchExact = function (patt, str) {
var match = str.match(patt);
return match !== null && str === match[0];
};
return function () {
var str = this.value;
if (!matchExact(current, str) ) {
var tmp = patterns[index + 1] ?
new RegExp(current.source + patterns[index + 1].source) :
false;
if (tmp && matchExact(tmp, str)) {
current = tmp;
index++;
}
else {
alert("Wrong");
}
}
}
};
document.getElementById("x").onkeyup = addValidation(["[a-zA-Z0-9\\.]+", "@{1}", "[a-zA-Z0-9]+", "\\.{1}", "[a-zA-Z]{1,3}"]);
这似乎有效,但是。。。它很难看,如果你后退一步,它会提醒你(例如,“name@”,然后按backspace)
我知道Dojo的验证非常好,但我不想使用Dojo。有没有更好的方法来实现这一点
//编辑:这是一个示例,但您可以定义自己的模式(如email regex),它将完美地对其进行验证。在验证开始之前添加间隔:
var t;
document.getElementById("x").onkeyup = function () {
if (t) {
clearTimeout(t);
}
t = setTimeout(function () {
//do validation
}, 1000)
}
永远不要尝试用常规表达式验证电子邮件地址。你要么允许使用无效的地址,要么阻止完全有效的电子邮件地址,这只会让访问者感到恼火。值得注意的是,迄今为止验证电子邮件地址的最佳正则表达式如下:
如果有许多领域,Thas似乎是一个相当麻烦的问题。最好使用一些关键的动作链接事件。不要确切地提到这段代码。我刚刚演示了如何解决这样的问题