首来看几个合法邮箱的例子:
-
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);
网友评论