検証メールはオプションではありません:(
電子メール アドレスを検証するために使用する必要がある、非常に具体的な一連のルールがあります。Apache Commons ライブラリと JavaMail ライブラリを試しました。どちらも RFC 2822 に準拠していますが、私のルールでは無効なメールがいくつか通過します。私は正規表現(regexi?)で運を試してきましたが、役に立ちませんでした。分かってる。正規表現は最良の選択肢ではなく、多くの時間がかかり、複雑になる可能性があります。それでも、それほど難しくない用語で概説されたルールがあるので、この特定のインスタンス用にルールを構築するだけで十分だと考えました。
ルール:
- 電子メール アドレスのローカル部分は、次のいずれかを使用できます。
- 大文字と小文字
- 数字の 0 ~ 9
- 特殊文字: , ! # $ % ^ & * ( ) ' ` + = - _ { } | 〜
- ピリオド。ピリオドで開始または終了することはできません
- 連続するピリオドを含めることはできません
- 電子メールのローカル部分とドメイン部分の間にアットマーク (@) が必要です
- ドメインには、文字、数字、アンダースコア、ピリオド、ハイフンのみを含める必要があります
- ハイフンで始めることはできません
- ハイフンで終わることはできません
- 2 つの連続するハイフンを含めることはできません
- メールのドメイン部分と TLD 部分の間にはピリオドが必要です
- TLD には文字のみを含める必要があります
- TLD はピリオドで終わらせてはいけません
これまでのところ、次の正規表現を使用しようとしています。
^((?!.\.{2,}.)[^.][-a-zA-Z0-9_.!@#$%^&*(),'+=`{|}~-]+[^.])@((?!.\-{2,}.)[^-_][-a-zA-Z0-9_.]+[^-_]\.[a-zA-z]+)$
これは、無効な電子メール (justlikethat@gm--ail.com など) でまだ失敗しています。
正規表現で何が欠けているか、間違っていますか? 電子メールが正規表現なしで要件に準拠していることを確認する別の方法はありますか?
前もって感謝します!
PSこれはJavaであるため、上記の正規表現のすべてのエスケープ文字は二重にエスケープする必要があります(例:\.
is \\.
)。私は明らかに正規表現の第一人者ではないので、これを視覚化するためにRegexperも使用しています。