3

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

4

2 に答える 2

1

検証が開始される前に間隔を追加します。

var t;
document.getElementById("x").onkeyup = function () {
    if (t) {
        clearTimeout(t);
    }
    t = setTimeout(function () {
        //do validation
    }, 1000)
}
于 2013-01-11T09:54:29.500 に答える
0

メールアドレスを正規表現で検証しようとしないでください。無効なアドレスを許可するか、完全に有効な電子メール アドレスをブロックして訪問者を困らせることになります。これまでのところ、メールアドレスを検証するための最良の正規表現は次のとおりであることも覚えておく価値があります。

http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

于 2013-01-11T10:11:57.653 に答える