【正規表現】精度の割と高いメールアドレスチェック
正規表現3分間クッキング。
本日のメニューは、春らしい正規表現を使ったメアド判定です。
まずは材料から。
~ ローカル部 ~
これは@の左側の部分ですね。
以下のようになっております。
- 英数字
! # $ % & ' * + - / = ? ^ _ { | } ~
.
(先頭と末尾以外で使用可能。2個以上連続してはならない)
(携帯電話やdionメールなどは連続ドット、@前ドットがあり得る)
~ ドメイン部 ~
つづいて@の右側部分になります。
- 英数字、
-
(先頭以外で使用可能)から成るサブドメインを”.”でつないだもの
前述したように、
中にはRFCのルールを無視したアドレスも存在しますがとりあえずPC用
1.まず先頭から末尾まですべてマッチさせるため^と$を入れます。
/^@$/
2.次に使用可能文字や連続などを踏まえて……
出来たものがこちらになります。
/^[\w!#$%&'*+/=?^_{}\\|~-]+(\.[\w!#$%&'*+/=?^_{}\\|~-]+)*@([\w][\w-]*\.)+[\w][\w-]*$/
少しでも規則に外れようもんなら拒否するとても辛い味に仕上がりました。
こんなの作るのに3分以上掛ったのは番組の仕様です。
おまけ:
携帯などの連続ドットや@前ドットを許可するならこれ。
/^[\w!#$%&'*+/=?^_{}\\|~-]+([\w!#$%&'*+/=?^_{}\\|~\.-]+)*@([\w][\w-]*\.)+[\w][\w-]*$/
PHPでpreg_matchする場合はパターン中の/(スラッシュ)をエスケープする必要があるみたいです。
ありがとう。
お役に立てて何よりです。
[\w!#$%&’*+/=?^_@{}\\|~-] ←最初の方の@マークは不要では無いでしょうか?
tukapiyo様
ご指摘ありがとうございます。
ローカル部に@は不要ですので修正しました。