メールアドレスって相当複雑なのです
php spotさんより
正規表現:メールアドレスかどうか調べる - phpspot
はてなブックマーク眺めてたら見つけた。
有効なメールアドレスも拒否しまくりですな。
使用文字が限られている携帯用メールアドレスでも、これじゃフォローしきれてません。
まああくまでサンプルであり、正解じゃありませんよってことですかな。
RFC 2822 ()
からちょいと抜き出すと
addr-spec = local-part "@" domain local-part = dot-atom / quoted-string / obs-local-part domain = dot-atom / domain-literal / obs-domain domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS] dcontent = dtext / quoted-pair dtext = NO-WS-CTL / ; Non white space controls %d33-90 / ; The rest of the US-ASCII %d94-126 ; characters not including "[", ; "]", or "\" atext = ALPHA / DIGIT / ; Any character except controls, "!" / "#" / ; SP, and specials. "$" / "%" / ; Used for atoms "&" / "'" / "*" / "+" / "-" / "/" / "=" / "?" / "^" / "_" / "`" / "{" / "|" / "}" / "~" atom = [CFWS] 1*atext [CFWS] dot-atom = [CFWS] dot-atom-text [CFWS] dot-atom-text = 1*atext *("." 1*atext)
かな。
上記だけでは完全じゃありませんが、詳細はRFCを読むって事で。
はてなブックマークのコメントにあったMailのソースを見てみると、
コロンや¥マークも許可してるっぽい。どうなんだろう、いいのかな?
あと、メールアドレスチェック用のスクリプト等は、RFCに準拠してチェックすれば良いってもんでもありません。
メールアドレスの先頭がピリオドで始まっていたり、ピリオドが連続していたり、アットマークの前にピリオドがあるのはRFC的には違反です。
が、チェックする側がそれを拒否する事が出来ない程、使用している人は多いので。
参考http://neta.ywcafe.net/000435.html
因みに、メールアドレスを正規表現で完璧に表現しようとすると、凄い事になります。
参考Perlメモ
今回はてブにphp spotさんが上げられていましたが、「メールアドレス 正規表現」とかで検索してみると、
もっと適当なメールアドレス正規表現が一杯出てきます。
メールアドレスをチェックする正規表現が必要なら、まずメールアドレスを知れって事ですな。
その上で必要な正規表現を書くべし。