メール検証

この記事では、正規表現を使用した電子メール検証について説明します。 すべての正規表現はi修飾子で実行されます。 大文字と小文字を区別しない検証を行います。

準備する


検証を記述する前に、電子メールアドレスの構成を知る必要があります。 私は誰もがこれが「ユーザー名@ホスト名」であることを知っていると思います。 正規表現の作成を、ホスト名検証とユーザー名検証という2つの論理的な部分に分けるのが最善です。 もっとボリュームのあるものから始めましょう。

ホスト名検証


まず、ホスト名の構成について考えてみましょう。

ホスト名は、ピリオドで区切られた63文字以下の複数のコンポーネントとサフィックス(第1レベルドメイン)で構成されます。 同様に、コンポーネントはラテン文字、数字、ハイフンで構成され、ハイフンはコンポーネントの先頭または末尾に配置できません。 サフィックスは、第1レベルドメインの限定リストです( IANA Webサイトでリストを見つけました)。 式を簡略化するために、国のドメインを[az][az]として記述します(aからzまでの2文字は大文字と小文字を区別しません)。 また、非ラテン文字が公式に使用されるまでは使用しません。 結果として、接尾辞をチェックする式を取得します(構造(foo|bar)は、fooまたはbarのいずれかが検索されていることを示します。つまり、orを置換します)。

(aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|[az][az])

コンポーネントの場合、コードはより複雑になります。

([a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?\.)

式を分析しましょう:

[a-z0-9] #
([-a-z0-9]{0,61}[a-z0-9])? #
\. #


オプション部分を検討してください。

# ,
# {0,61} , 0 61
[-a-z0-9]{0,61}
# 61 , 63
[a-z0-9]


その結果、ホスト名を確認する式を取得しました。

([a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?\.)*(aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|[az][az])

コンポーネントの存在は必要ないという事実に注目します。なぜなら、 一部の第1レベルドメインはサーバーでサポートされています。

ユーザー名の検証


ユーザー名には以下を含めることができます。

次の式をお見せしましょう。

[-a-z0-9!#$%&'*+/=?^_`{|}~]+(\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*

実際、ここではすべてがシンプルです:1つ以上のシンボル[-a-z0-9!#$%&'*+/=?^_`{|}~] 、その後0個以上のコンポーネント\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+

最後に


正規表現のメール確認:

^[-a-z0-9!#$%&'*+/=?^_`{|}~]+(\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*@([a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?\.)*(aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|[az][az])$

この式は少し最適化できます(最適化については、別の記事があると思います)。

^[-a-z0-9!#$%&'*+/=?^_`{|}~]+(?:\.[-a-z0-9!#$%&'*+/=?^_`{|}~]+)*@(?:[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?\.)*(?:aero|arpa|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|[az][az])$

ボーナス


最初のトピックの解説で例として引用された正規表現を考えてみましょう。

^(\S+)@([a-z0-9-]+)(\.)([az]{2,4})(\.?)([az]{0,4})+$

主な問題は何ですか?


PSバグや要望について書いてください-私は間違いなくそれを修正します。
PPS自由に使用できる電子メール検証機能をレイアウトできます。

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


All Articles