問題は、インターネット、MSDN、およびその他のソースにあるすべての電子メール検証テンプレートが検証要件を満たしていないことでした。 RFC 2821およびRFC 2821の形式の主要なソースに目を向けると、アドレスを正確かつ正確に検証する方法がわかりました。
メールアドレス=ローカル部分@ドメイン部分
ローカル部
ローカル部分で許可される文字:
- +
- -
- 。 (local..part-2ポイントの連続、.localPart-開始点とlocalPart。-終了点を除く)
- 0-9
- AZ、az
- -
ローカル部分で許可されていない文字
- !
- 「
- #
- $
- %
- (
- )
- 、
- :
- ;
- <
- >
- [
- \
- ]
- ''
- |
- スペース、DEL、制御文字
ローカル部分で使用するのは望ましくないが、存在する可能性のある文字。 (サーバーが受け入れる場合はテストが必要です)。
- ?
- ''
- *
- /
- =
- ?
- ^
- {
- }
- 〜
アドレスで使用しない理由は、多くが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
正規表現が不完全な場合、またはいずれにせよ、誤った要望やコメントを歓迎します。
これは、(クライアントが要求したように)真剣かつ正確なチェックの使用が必要な特別なケースであることを強調したいと思います。 他のケースでは、気にすることはできません:)