我想在键入时验证输入,因此我使用 onkeyup 事件来执行此操作,但是如果我验证电子邮件正则表达式“name@domain.com”,一旦用户开始键入它就会引发错误 - 第一个字符与正则表达式不匹配。 ..
所以我写了这个:
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@”并按下退格键)。
我知道 Dojo 的验证很棒,但我不想使用 Dojo。有没有更好的方法来实现这一目标?
//编辑: http: //livedocs.dojotoolkit.org/dijit/form/ValidationTextBox这是一个示例,但您可以定义自己的模式(如电子邮件正则表达式),它将完美地验证它。