メールアドレスって相当複雑なのです

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さんが上げられていましたが、「メールアドレス 正規表現」とかで検索してみると、
もっと適当なメールアドレス正規表現が一杯出てきます。
メールアドレスをチェックする正規表現が必要なら、まずメールアドレスを知れって事ですな。
その上で必要な正規表現を書くべし。