0

プラグインを使用せずに JQuery で検証システムを構築しようとしています

私のJQueryコードはそのままで、入力ごとに検証関数があります。

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  alert("email is "+regex.test(email));
  return regex.test(email);
}

正規表現が評判の高い回答から借用されているにもかかわらず、電子メールが適切に検証されていないため、これにアラートがあることに気付くでしょう-> jQueryを使用した電子メールの検証

いくつかの有効な電子メールでテストしましたが、役に立ちませんでした。ここから取得した有効なメール -> http://en.wikipedia.org/wiki/Email_address#Valid_email_addresses . 正規表現を /\S+/ だけに変更したところ、他のすべてが正常に機能したため、問題が正規表現にあることがわかりました。

とにかく、この正規表現が true と評価されないのはなぜですか? 私の理解は次のとおりです。

/^([a-zA-Z0-9_\.\-\+])+

az、AZ、0-9、.、-、または + のいずれかの文字で始まります。1回以上

\@

「@」記号が続く

(([a-zA-Z0-9\-])+\.)+

az、AZ、0-9、または - の 1 つまたは複数の文字の後に、ピリオド "." が続きます。

([a-zA-Z0-9]{2,4})+$

az、AZ、0-9 の 2、3、または 4 文字の 1 つまたは複数で終わる

編集

いくつかのニュースがあるので、ここで奇妙な動作が行われています。私のコードからコピーして貼り付けたこのjsfiddleを見てください-> http://jsfiddle.net/hxcD3/。電子メールは true と評価されます。しかし、私が取り組んでいる Web サイト -> danmacmill.host22.com にアクセスし、連絡先の電子メール入力に同じことを入力すると、false と表示されます。

また、JQuery に渡された email 変数をコンソールに記録したことにも気付くと思いますので、正確な文字列を確認できます。なぜそれが適切に検証されないのかが私の質問です。参考までに、ここに私の検証チェッカー コードを示します。

function check(isValid, name, message) {
    if (! isValid(name) ) {
        if (! $('#div-'+name).hasClass("warned") ) {
            $('#div-'+name).prepend('<div class="bubble-wrapper"><div class="bubble"><p>'+message+'</p></div></div>');
            var div = $('#div-'+name).position();
            $('#info p:first-child').text("top: "+div.top);
            $('#info p:nth-child(2)').text("left: "+div.left);
            $('#div-'+name+' .bubble-wrapper').css({
                top: div.top - 35 + "px"
            });
            $('#div-'+name).addClass("warned");
        }
        return false;
    }
    else
        return true;
}
4

1 に答える 1

1

The regex you mentioned --which is well known by the way, will match 99% of emails.

The only reason why I believe it's not working for you is that you are feeding the function emails with surrounding space or spacing, you must trim emails before testing them.


-- Edit --

Your script (myscript.js:170) has an error:

    if (! check(isEmail, "email", "Invalid email.") ) {

Remove quotes around email variable

    if (! check(isEmail, email, "Invalid email.") ) {

Same thing for lines: 159 and 171

于 2013-08-09T22:51:02.840 に答える