首來看幾個合法郵箱的例子:
1234@qq.com
(純數字)wang@126.com
(純字母)wang123@126.com
(數字、字母混合)wang123@vip.163.com
(多級域名)wang_email@outlook.com
(含下劃線_
)wang.email@gmail.com
(含英語句號.
)
根據對以上郵箱的觀察,可將郵箱分為兩部分(“@”左邊和右邊部分)來進行分析:
- 左邊部分可以有數字、字母、下劃線(
_
)和英語句號(.
),因此可以表示成:[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*
- 右邊部分是域名,按照域名的規則,可以有數字、字母、短橫線(
-
)和英語句號(.
),另外頂級域名一般為 2 ~ 6 個英文字母(比如“cn”、“com”、“site”、“group”、“online”),故可表示為:([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}
要注意兩點:
- 考慮到匹配郵箱時字串的一頭一尾不能有其它字元,故要加上開始標誌元字元
^
和結束標誌元字元$
。 - 英語句號(
.
)是正規表示式的元字元,因此要進行轉義(\.
)。
用於郵箱驗證的函式及測試用例如下:
/* 用於郵箱驗證的函式 */
function validateEmail (email) {
// 郵箱驗證正則
var reg = /^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/;
return reg.test(email);
}
// 測試用例
var emailArr = ['1234@qq.com', 'wang@126.com', 'wang123@126.com', 'wang123@vip.163.com', 'wang_email@outlook.com', 'wang.email@gmail.com'];
var res = emailArr.map(function (item) {
if (validateEmail(item)) {
return item + ' 有效';
}
return item + ' 無效';
});
// 測試用例均有效
console.log(res);
複製程式碼