今天把正则又复习了一遍,为了加深记忆,自己写一个邮箱的正则表达式
咱们先来看几个合法的邮箱地址
hd33322@nat123.com
maksim.kim.82@d-link.ua
vova_lazarev1969@jaagers.com
b4-service.s@zhaopinmail.com
通过观察上面几个例子,不难看出所有邮箱地址都分为两个部分,@左边是一部分,右边为令一部分,那么我们可以分成两部分来书写正则表达式
左边一般是由数字"[0-9]"、字母"[a-zA-Z]"、下划线"_"、减号"-"、英文句号"."组成,似乎没
有明确限定长度,而且不是以下划线"_"、减号"-"、英文句号"."来开头或者结尾的,那么左边
部分可以写成 [0-9a-zA-Z]+([.-_]*[0-9a-zA-Z]+)*
右边是域名部分,除字母数字英文句号外,也可能包含下划线和减号,而且还有多级域名,但
最后的顶级域名比较固定,一般是2到6位字母结束,例
如".cn"、".com"、".org"、".museum"等,故正则可以表示为
([0-9a-zA-Z]+[-_]*[0-9a-zA-Z]+.)+[0-9a-zA-Z]{2,6}
两边合并,整个表达式为: /^[0-9a-zA-Z]+([.-_]*[0-9a-zA-Z]+)*@([0-9a-zA-Z]+[-_]*[0-9a-zA-Z]+.)+[0-9a-zA-Z]{2,6}$/
要注意的是,减号"-"在正则里是连字符,英文句号"."是元字符,所以为了代表他们的字面意
思,要加上反斜杠""进行转义
测试一下
let emails = ['hd33322@nat123.com','maksim.kim.82@d-link.ua','vova_lazarev1969@jaagers.com','b4-service.s@zhaopinmail.com'
]
const regulation = /^[0-9a-zA-Z]+([.-_]*[0-9a-zA-Z]+)*@([0-9a-zA-Z]+[-_]*[0-9a-zA-Z]+.)+[0-9a-zA-Z]{2,6}$/
console.log(emails.every(email => regulation.test(email)))
//true