这个Email验证的正则表达式基本符合RFC3521规范,缺少ipv6部分的验证。
Mail=("([\\x20-\\x21\\x23-\\x5B\\x5D-\\x7E]|(\\\\[\\x20-\\x7E]))*"|^[-!#$%&\'*+/0-9=?A-Z\\^_`a-z{|}~]+(.[-!#$%&\'*+/0-9=?A-Z\\^_`a-z{|}~]+)*)@([a-zA-Z0-9]+([\\-\\da-zA-Z]*[a-zA-Z0-9]+)*(\\.[a-zA-Z\\d]+([\\-\\da-zA-Z]*[a-zA-Z0-9]+)*)*|[\\[]((1[0-9][0-9]|25[0-5]|2[0-4][0-9]|0[0-9][0-9]|00[0-9]|[0-9][0-9]|[0-9])\\.(1[0-9][0-9]|25[0-5]|2[0-4][0-9]|0[0-9][0-9]|00[0-9]|[0-9][0-9]|[0-9])\\.(1[0-9][0-9]|25[0-5]|2[0-4][0-9]|0[0-9][0-9]|00[0-9]|[0-9][0-9]|[0-9])\\.(1[0-9][0-9]|25[0-5]|2[0-4][0-9]|0[0-9][0-9]|00[0-9]|[0-9][0-9]|[0-9]))[\\]]|((1[0-9][0-9]|25[0-5]|2[0-4][0-9]|0[0-9][0-9]|00[0-9]|[0-9][0-9]|[0-9])\\.(1[0-9][0-9]|25[0-5]|2[0-4][0-9]|0[0-9][0-9]|00[0-9]|[0-9][0-9]|[0-9])\\.(1[0-9][0-9]|25[0-5]|2[0-4][0-9]|0[0-9][0-9]|00[0-9]|[0-9][0-9]|[0-9])\\.(1[0-9][0-9]|25[0-5]|2[0-4][0-9]|0[0-9][0-9]|00[0-9]|[0-9][0-9]|[0-9])))
RFC3521中的相关定义:
Domain = sub-domain *("." sub-domain)
sub-domain = Let-dig [Ldh-str]
Let-dig = ALPHA / DIGIT
Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig
address-literal = "[" ( IPv4-address-literal /
IPv6-address-literal /
General-address-literal ) "]"
; See Section 4.1.3
Mailbox = Local-part "@" ( Domain / address-literal )
Local-part = Dot-string / Quoted-string
; MAY be case-sensitive
Dot-string = Atom *("." Atom)
Atom = 1*atext
Quoted-string = DQUOTE *QcontentSMTP DQUOTE
QcontentSMTP = qtextSMTP / quoted-pairSMTP
quoted-pairSMTP = %d92 %d32-126
; i.e., backslash followed by any ASCII
; graphic (including itself) or SPace
qtextSMTP = %d32-33 / %d35-91 / %d93-126
; i.e., within a quoted string, any
; ASCII graphic or space is permitted
; without blackslash-quoting except
; double-quote and the backslash itself.