18

利用可能な解決策があるかどうかはわかりませんが、見つけることができません。そこで再度質問。

私は電子メールバリデータを書いています。これにより、すべての適切な形式の電子メールが検証されます (これは、電子メールが適切な形式であることを確認するための 1 つのレベルの検証にすぎません)。私のコードは国際コードであるため、非ラテン文字もサポートする必要があります。そのための最も効率的な正規表現を作成するにはどうすればよいですか?

国際メール: http://en.wikipedia.org/wiki/International_email

メールの例:

  1. 伊昭傑@郵件.商務
  2. राम@मोहन.ईन्फो</li>
  3. юзер@екзампл.ком
  4. θσερ@εχαμπλε.ψομ

上記のすべての形式を検証できる必要があります

4

4 に答える 4

9

正規表現による電子メールの検証が非常に緩いのは、効率的ではないからです。メール アドレスの構文には仕様がありますが、それを確認するための正規表現は非常に長く、実用的ではありません。さらに、電子メール プロバイダーは、実際の仕様よりも構文の実装においてより厳密です。電子メールは、仕様では有効であると見なされますが、プロバイダーによっては無効であると見なされる場合があります。

これが、アクティベーション メールが存在する理由でもあります。メールが有効で、存在し、現在使用されているかどうかを確認する唯一の方法は、通常は一意のアクティベーション コードまたはリンクを送信することです。その電子メールにのみ送信された一意のアクティベーション コードまたはリンクが使用された場合にのみ、その電子メールは有効と見なされます。

それまでは、ユーザー名、@およびドメインの部分をチェックして、電子メールを検証するためのより緩いアプローチを検討してください。それに、なぜ偽の電子メールを使用してサインアップするのでしょうか? その場合、アクティベーション リンクを取得できず、アカウントの作成を続行できません。

于 2013-05-09T05:30:41.960 に答える
0

Javaの場合、これは私にとって非常にうまく機能します。

"^[\\p{L}\\p{N}\\._%+-]+@[\\p{L}\\p{N}\\.\\-]+\\.[\\p{L}]{2,}$"

@ の後に IP を使用することはできませんが、送信元の最も有効な電子メールはxxx@xxx.TDLそれで検証できます。 \p{L}UTF 文字を\p{N}検証し、UTF 番号を検証します。詳細については、このドキュメントを確認してください。

于 2015-11-16T12:55:43.993 に答える