這近在做email 的檢查,也研究了 RFC,把email的格式整理:
Email 可用的字元
一個 Email 主要由三部分組成:1 郵件帳號 (local mailbox part)、2 @ (at)、3 郵件網域 (the domain name)。
符合規格的郵件帳號可由以下字元組成﹕a-z、A-Z、0-9、底線 (_) 和單點 (.)。其餘符號並未被所有的email伺服器所支援。
符合規格的郵件網域只可由下列字元組成﹕a-z、A-Z、0-9、減號(-) 和單點 (.)。不分大小寫,其餘符號不可使用(可用IP當網域的寫法在此不討論,請參考[3])。
Email 的構成要素為何?
其中要注意有幾點:
(1) 郵件帳號是有區分大小寫,但是一般而言郵件主機是不理會大寫的帳號(不知道是不收件,還是把他當小寫看待,這需要證實),例如 sendmail 中預設是不理會大寫的帳號。為了避免困擾,盡量不使用大寫的帳號。
(2) 網域不分大小寫
(3) 網域最小組成單元是二個字節,例如 aaa.com 或是 mail.bbb.com。
(4) 郵件帳號應該要以 a-z 0-9 開頭,不能用'.'作開頭。
(5) 郵件帳號最多64字元,整個email字串最長255字元
php 中 email 的 regex?
參考php 官網中 Reno 的回應,他寫出的 regex 如下:
$pattern = '/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])' . |
延伸閱讀
正則表達式:Email名稱防止連續輸入點(.)及下底線(_)@精讚
參考資料
[1] RFC 2821 http://www.faqs.org/rfcs/rfc2821.html
[2] About.com Are Email Addresses Case Sensitive?
[3] https://en.wikipedia.org/wiki/Email_address
原文 2010-05-02 22:44:17