先介绍下Email的规则:local-part@domain |
local-part最长64,domain最长253,总长最长256 |
local-part可以使用任意ASCII字符: |
大小写英文字母 a-z,A-Z |
数字 0-9 |
字符 ! #$%&'*+-/=?^_`{|}~ |
字符 .不能是第一个和最后一个,不能连续出现两次 |
但是有些邮件服务器会拒绝包含有特殊字符的邮件地址 |
domain(域名)仅限于26个英文字母、10个数字、连词号- |
连词号-不能是第一个字符 |
顶级域名(com、cn等)长度为2到6个 |
先说说网上流传的版本: |
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* |
() 莫名奇妙的分组,如果只分组不记录,可以使用(?:) |
@\w domain不能包含下划线_ |
\w+([-.]\w+)* 顶级域名不符合规则 |
修正如下: |
var remail = /^([\w-_]+(?:\.[\w-_]+)*)@((?:[a-z0-9]+(?:-[a-zA-Z0-9]+)*)+\.[a-z]{2,6})$/i |
remail.exec( 'nuysoft@gmail.com' ) // "nuysoft@gmail.com", "nuysoft", "gmail.com"] |
remail.exec( 'nuysoft@gmail.comcomcom' ) // null |
remail.exec( 'nuysoft@_gmail.com ) // null |
修正后的正则有如下局限性: |
不支持中文邮箱、中文域名,之所以不在其中支持是因为我个人的爱好倾向,反感这类华而不实的玩意 |
不支持特殊符号,避免非邮件服务器拒绝,如果需要,可以添加。 |