1

私はこれら 2 つの正規表現を持っています。どちらも電子メールを検証するためのものです。最初のものは ASP.NET 電子メール正規表現バリデータからのもので、2 つ目は SO で見つけたものです。私の質問は、それらの違いは何ですか、どちらが優れていますか?

/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/

/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/

どちらの正規表現でもukkkk

<script type="text/javascript">

var regex = /^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
var regex2 = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

alert(regex.test('nhassyk@yahoo.co.ukkkk'));
alert(regex2.test('nhassyk@yahoo.co.ukkkk'));

</script>
4

2 に答える 2

1

実際、どちらも完璧ではありません。

それらをより良くしましょう:[a-zA-Z0-9_]\wは同じなので、2番目のバリアントを使用します。
のような拳レベルのドメインがtravelあるので、最大長を増やしますが、もちろん*、最初の正規表現のようには使用しません。
そして結局のところ、2番目の正規表現には間違いがあります-最後のプラスがあるべきではありません。第1レベルのドメインが必要ですが、1つだけです。

結果は次のとおりです。^([\w\.\-\+])+\@(([\w\-])+\.)+([a-zA-Z0-9]{2,6})$

とにかく、nhassyk@yahoo.co.ukkkkそれが存在しなくても、有効な電子メールです。

そして、誰かが知っていますか:6シンボルより長い第1レベルドメインはありますか?

更新:RFC標準に従って電子メールを検証することについての素晴らしい記事があります最終的なバリアントは非常に印象的です。

于 2012-06-20T21:09:51.300 に答える
1

「より良い」はかなり主観的な用語です。それは、正確に何を探しているかによって異なります。

最初の正規表現では、電子メール アドレスの最初の部分で一重引用符を使用でき、アンダースコアを含む \w+ を使用するため、「より良い」の基準の 1 つとしてそれを使用している場合は、より包括的なものになります。

2 番目は、最初のドメインではアンダースコアを使用していませんが、最上位ドメインにはアンダースコアがないため、これは些細なことです。{2,4}+$/また、アドレスの末尾が「正しく」なるまで 2、3、または 4 のグループに分割されるため、速度も遅くなります。より高速に実行するには、 に変更する必要があり{2,})$ます。

最終的には、有効なメールアドレスと見なしたいものに行き着きます.

于 2012-06-20T21:02:25.267 に答える