Authentication




Cancel OK
B!コメントする  2013-10-23 22:21:00 by old

PHPでメールアドレス判別の正規表現

先に言っておくと正規表現とかで完全にメールアドレスを判定することは出来ないっぽいです。
メールアドレス自体も色々な書き方ができるためで"とかでくくったりとかmailbox形式とかまでいくと100%の精度で判別するのは無理。

とは言っても判別はしないといけないのでいくつか見てみた。

よくネットで見かける

^([a-zA-Z0-9])+([a-zA-Z0-9.-])*@([a-zA-Z0-9-])+([a-zA-Z0-9.-]+)+$
※ダメな例


はアウト。
これだと「hoge@example」も通ってしまう。
せめてもう少しがんばって欲しい。

普通に検出するなら

^([a-z0-9+-]+)(.[a-z0-9+_-]+)*@([a-z0-9-]+.)+[a-z]{2,6}$


を使うと良さげ。
これcodeigniterでも使われてました。
でもこれはあくまでメールアドレスのみなのでmailboxとかは判別不可。
とは言えアドレス判別ならこれでもいい気がするけど。

でもこれだとdocomoの糞仕様のアドレスが弾かれる事がある。
アドレスの最初にハイフンで顔文字っぽくしてるようなアドレスとかも検出したいなら

^[-+.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]{2,6}$


でいい気がする。
というか糞仕様アドレスはもう相手にしない方がいい気がしてならない。

厳密にしたいならもうそういうモジュール突っ込んで専門家にお任せした方がいいと思う。



PHP  

  • コメント
  • コメントはまだありません