入力時に入力を検証したいので、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これは例ですが、独自のパターン (電子メールの正規表現など) を定義すると、完全に検証されます。