正規表現によるメールアドレスの正確な検証

誰もが知っているように、電子メールアドレスをチェックする最も便利な方法の1つは正規表現です。 最近、最も正確な住所確認の問題に対処する必要がありました。 このチェックは、アドレスの各リストに1つの大きなファイルが自動的に読み込まれるアンケートの自動スパム送信システムで必要でした。 明らかに無効なアドレスの最大数を除外する必要がありました。
問題は、インターネット、MSDN、およびその他のソースにあるすべての電子メール検証テンプレートが検証要件を満たしていないことでした。 RFC 2821およびRFC 2821の形式の主要なソースに目を向けると、アドレスを正確かつ正確に検証する方法がわかりました。


メールアドレス=ローカル部分@ドメイン部分

ローカル部



ローカル部分で許可される文字:


ローカル部分で許可されていない文字


ローカル部分で使用するのは望ましくないが、存在する可能性のある文字。 (サーバーが受け入れる場合はテストが必要です)。

アドレスで使用しない理由は、多くがUNIXシェルの特殊文字グループに属しているためです。

ドメイン部



-IPアドレスの形式、ポートのあるIPアドレス、または小文字と大文字のラテン文字とダッシュのみを含むリテラル式( '-'、ただし、制限はあります:ダッシュは末尾にも先頭にもできません) ;連続する2つのダッシュの制限については何も言われていません)、ドットで区切られています。 したがって、domain..comという表現は無効です。

その結果、インターネットテンプレートの1つを変更すると、次のようになりました。

^ [a-zA-Z0-9 _ '+ * / ^&=?〜{} \-](\。?[a-zA-Z0-9 _' + * / ^&=?〜{} \-]) * \ @((\ d {1,3} \。\ d {1,3} \。\ d {1,3} \。\ d {1,3}(\:\ d {1,3}) ?)|(((([[a-zA-Z0-9] [a-zA-Z0-9 \-] + [a-zA-Z0-9])|([a-zA-Z0-9] { 1,2}))[\。] {1})+([a-zA-Z] {2,6})))$

参照:
RFC 2821: www.remote.org/jochen/rfc/rfc821.txt
RFC 2822: www.remote.org/jochen/rfc/rfc822.txt

有効/無効な文字のリスト: www.remote.org/jochen/mail/info/chars.html

正規表現が不完全な場合、またはいずれにせよ、誤った要望やコメントを歓迎します。
これは、(クライアントが要求したように)真剣かつ正確なチェックの使用が必要な特別なケースであることを強調したいと思います。 他のケースでは、気にすることはできません:)

Source: https://habr.com/ru/post/J74206/


All Articles