3

この正規表現ステートメントを機能させようとしています

^([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})+(\s?[,]\s?|$))+$

次のような文字列のエラーを見つけるために値を Regex ステートメントに渡すtextboxusingのコンマ区切りの電子メールの文字列の場合:jQuery('#textbox').val();

"test@test.com, test1@test.com,test2@test.com"

しかし、何らかの理由でエラーが返されます。http://regexpal.com/で実行してみましたが、よくわかりません。

注意:これは基本的なクライアント側のテストです。MailClass私は .NET4.0 を使用してサーバー側で電子メールを検証します。ここでの目的は、単純なエラーを排除することです。

エスケープされたバージョン:

^([_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,3})+(\\s?[,]\\s?|$))+$

4

1 に答える 1

2

パブロが言ったように、最初にカンマで分割し、次に正規表現を繰り返し適用して個々の電子メールを検証することで、物事を大幅に簡素化できます。次に、悪い点を指摘することもできますが、これには大きな注意点があります。

記事Comparing E-mail Address Validating Regular Expressionsの正規表現を見てください。私が今見つけられなかった別のより良い正規表現がありますが、要点は、RFC で指定されている有効な電子メール アドレスのルールが信じられないほど複雑であるため、電子メールをチェックするための正しい正規表現は信じられないほど複雑であるということです。

あなたのものでは、この部分(\.[a-z]{2,3})+が私に飛びつきました。{2,3}トップレベル ドメインを検証する試みとしてよく見かける2 文字または 3 文字のグループですが、(1) 正規表現ではこれらのグループの 1つ以上が許可されており、(2) 次のようなドメインから有効な電子メール アドレスが除外されます。.infoまたは(多くのサイトは、 3 文字のドメインのみが合法であると考えため、私のアドレス.museum を拒否しています。).us

サーバーに最終的な検証を任せながら、深刻に無効なアドレスを拒否するための私のアドバイスは、基本的に (何でも)@(何でも).(何でも) を許可することです -- "at" と "dot" だけをチェックし、もちろん複数のドットを許可します。

編集:「単純な」正規表現の例

[^@]+@[^.]+(\.[^.]+)+

これは一致します

  • test@test.com
  • test1@test.com
  • test2@test.com
  • foo@bar.baz.co.uk
  • myname@modern.museum

しかも似合わないfoo@this....that

注: これでも一部の有効な電子メール アドレスは拒否されます。すべて適切にエスケープされている場合は、左側に何でも許可されているためです。しかし、実生活で電子メールを使用してから 25 年間、そのようなことは見たことがありません。@@

于 2011-06-20T16:39:56.743 に答える