常用正則表示式—郵箱(Email)
要驗證一個字串是否為郵箱的話,首先要了解郵箱賬號的格式。我嘗試過在網上找出一個標準的格式,但是很遺憾我沒有找到。我也嘗試使用RFC標準來判斷郵箱的格式,但是也沒有結果。網上些部落格說不應該使用RFC標準來驗證郵箱是否合法,有興趣的可以看看“is this email valid?”和“Don’t RFC-Validate Email Addresses”。據瞭解【參考】,現在用中文命名的郵箱也合法了,比如“楊元慶@聯想.中國”。
雖然沒有統一的郵箱賬號格式,但是所有郵箱都符合“名稱@域名”的規律。對於名稱和域名的字元限制,我們可以根據專案的情況定義一個,比如只允許有英文、數字、下劃線等組成。下面舉例實現一些驗證郵箱格式的正則表示式。
例項1、只允許英文字母、數字、下劃線、英文句號、以及中劃線組成 舉例:[email protected] 分析郵件名稱部分:
26個大小寫英文字母表示為a-zA-Z 數字表示為0-9 下劃線表示為_ 中劃線表示為- 由於名稱是由若干個字母、數字、下劃線和中劃線組成,所以需要用到+表示多次出現 根據以上條件得出郵件名稱表示式:[a-zA-Z0-9_-]+
分析域名部分:
一般域名的規律為“[N級域名][三級域名.]二級域名.頂級域名”,比如“qq.com”、“www.qq.com”、“mp.weixin.qq.com”、“12-34.com.cn”,分析可得域名類似“** .** .** .**”組成。
“”部分可以表示為[a-zA-Z0-9_-]+ “.”部分可以表示為.[a-zA-Z0-9_-]+ 多個“.**”可以表示為(.[a-zA-Z0-9_-]+)+ 綜上所述,域名部分可以表示為[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+
最終表示式: 由於郵箱的基本格式為“名稱@域名”,需要使用“^”匹配郵箱的開始部分,用“KaTeX parse error: Can't use function '\.' in math mode at position 74: …[a-zA-Z0-9_-]+(\̲.̲[a-zA-Z0-9_-]+)…
例項2、名稱允許漢字、字母、數字,域名只允許英文域名
舉例:楊元慶
分析郵件名稱部分:
漢字在正則表示為[\u4e00-\u9fa5] 字母和數字表示為A-Za-z0-9 通過分析得出郵件名稱部分表示式為[A-Za-z0-9\u4e00-\u9fa5]+ 分析郵件域名部分
郵件部分可以參考例項1中的分析域名部分。 得出域名部分的表示式為[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+。
最終表示式: 我們用@符號將郵箱的名稱和域名拼接起來,因此完整的郵箱表示式為 1[email protected][a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$
A-Za-z0-9\u4e00-\u9fa5 ↩︎