プラグインを使用せずに 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;
}