1

私は正規表現としてこれを持っています:

var email = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;

そして、これは私の if ステートメントです:

if($('#email').val() ==""){  
    $('#emailErrorMsg').text("Please enter a valid email address.");
}  
else if(!email.test('#email')) {   
    $('#emailErrorMsg').text("OK");   
}  
else($('#emailErrorMsg').text("Please enter a valid email address."));  
});

有効なメールアドレスを入力すると、「OK」と表示されます。ただし、たとえばテキストを入力しても、「有効なメールアドレスを入力してください」と言いたいときに「OK」と表示されます。誰でも任意のアイデア。ちなみに私はまだまだ素人です!

4

4 に答える 4

2

主な問題は、?パターン全体を囲む括弧の後に、正規表現の最後にが表示されることです。これにより、事実上、一致全体がオプションになるため、正規表現は文字通り何にでも一致します。

要素#emailの値ではなく、リテラル文字列をテストしていることにも注意してください。#emailに適切な文字列を渡すようにしてくださいtest()

于 2012-10-22T21:30:03.353 に答える
1

メールの検証は難しいです。完全に正しい正規表現は、 http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.htmlで見ることができる真の怪物であり、おそらくあなたが望むものではありません。

代わりに、いくつかのオプションがあります。電子メールの99%に一致する正規表現を使用するか、電子メール検証ライブラリを使用してサーバー側で実行するか、有限状態マシンを実装して正しく解析します。ステートマシンはおそらく大きすぎて(タイプミスの可能性の提案のようなきちんとしたものを許可しますが)、すべてのサーバー側でそれを行うと、とにかく(誰かがJavaScriptを無効にしている場合はどうなりますか?) -タイプチェック。

これにより、すべての合法的な電子メールに一致するわけではないが、誰かが登録する可能性が非常に低いほど十分に一致する、より単純な正規表現が残ります。JavaScriptでメールアドレスを検証するからの正規表現?トリックをかなりうまくやるはずです:

/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\
".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA
-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

また、小さなタイプミスをしました。

else if(!email.test('#email')) {   
    $('#emailErrorMsg').text("OK");   
}

文字列'#email'に対してテストしています-ID'email'の要素ではありません。これを次のように変更します。

else if(!email.test($('#email').val())) {   
    $('#emailErrorMsg').text("OK");   
}
于 2012-10-22T21:29:50.627 に答える
1

タグがあることがわかりました。JQueryプラグインを検証してみてください。単純な正規表現よりも優れています。

それでも正規表現が必要な場合は、JavaScript で電子メール アドレスを検証しますか?を参照してください。

于 2012-10-22T21:15:26.003 に答える
0

正規表現に少しタイプミスがあります。これを試して:

var email = /^([\w-\.]+)@([\w-]+\.)+[\w-]{2,6}?$/;

.museumの場合も処理する必要があります

于 2012-10-22T21:27:14.743 に答える