[英]Regular Expression for delimited email address
我正在寻找常规快递来验证电子邮件地址列表,如下所示
test1@abd.com;test.test@abc.com;test3@test.com
和
test1@abd.com;test.test@abc.com;test3@test.com;
可选的 ”;” 在列表的末尾。
谢谢,
来自: http : //regexlib.com/RETester.aspx?regexp_id = 1007
^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$
实际上,所有这些都是用于匹配邮件地址的非常差的模式。 要严格验证具有零误报和零误报的RFC 5322邮件地址,您需要以下精确模式:
(?x)
(?(DEFINE)
(?<address> (?&mailbox) | (?&group))
(?<mailbox> (?&name_addr) | (?&addr_spec))
(?<name_addr> (?&display_name)? (?&angle_addr))
(?<angle_addr> (?&CFWS)? < (?&addr_spec) > (?&CFWS)?)
(?<group> (?&display_name) : (?:(?&mailbox_list) | (?&CFWS))? ; (?&CFWS)?)
(?<display_name> (?&phrase))
(?<mailbox_list> (?&mailbox) (?: , (?&mailbox))*)
(?<addr_spec> (?&local_part) \@ (?&domain))
(?<local_part> (?&dot_atom) | (?"ed_string))
(?<domain> (?&dot_atom) | (?&domain_literal))
(?<domain_literal> (?&CFWS)? \[ (?: (?&FWS)? (?&dcontent))* (?&FWS)?
\] (?&CFWS)?)
(?<dcontent> (?&dtext) | (?"ed_pair))
(?<dtext> (?&NO_WS_CTL) | [\x21-\x5a\x5e-\x7e])
(?<atext> (?&ALPHA) | (?&DIGIT) | [!#\$%&'*+-/=?^_`{|}~])
(?<atom> (?&CFWS)? (?&atext)+ (?&CFWS)?)
(?<dot_atom> (?&CFWS)? (?&dot_atom_text) (?&CFWS)?)
(?<dot_atom_text> (?&atext)+ (?: \. (?&atext)+)*)
(?<text> [\x01-\x09\x0b\x0c\x0e-\x7f])
(?<quoted_pair> \\ (?&text))
(?<qtext> (?&NO_WS_CTL) | [\x21\x23-\x5b\x5d-\x7e])
(?<qcontent> (?&qtext) | (?"ed_pair))
(?<quoted_string> (?&CFWS)? (?&DQUOTE) (?:(?&FWS)? (?&qcontent))*
(?&FWS)? (?&DQUOTE) (?&CFWS)?)
(?<word> (?&atom) | (?"ed_string))
(?<phrase> (?&word)+)
# Folding white space
(?<FWS> (?: (?&WSP)* (?&CRLF))? (?&WSP)+)
(?<ctext> (?&NO_WS_CTL) | [\x21-\x27\x2a-\x5b\x5d-\x7e])
(?<ccontent> (?&ctext) | (?"ed_pair) | (?&comment))
(?<comment> \( (?: (?&FWS)? (?&ccontent))* (?&FWS)? \) )
(?<CFWS> (?: (?&FWS)? (?&comment))*
(?: (?:(?&FWS)? (?&comment)) | (?&FWS)))
# No whitespace control
(?<NO_WS_CTL> [\x01-\x08\x0b\x0c\x0e-\x1f\x7f])
(?<ALPHA> [A-Za-z])
(?<DIGIT> [0-9])
(?<CRLF> \x0d \x0a)
(?<DQUOTE> ")
(?<WSP> [\x20\x09])
)
(?&address) # finally, match a mail address
这需要Perl兼容正则表达式(PCRE)库或Perl本身才能正常工作。 我无法保证perl不兼容的模式引擎将正确处理递归。
@Evan的答案很接近,但表达式符合这些无效的情况:
a@test.comb@test.comc@test.com
(无分隔符) a@test.com;b@test.com.c@test.com
(期间.
被接受为分隔符) a@test.com;b@test.comc@test.com
(仅限第一个分隔符 - 问题#1的扩展名) 为了解决这些问题(并简化一点),我进行了以下更改:
+
号,以及第一个电子邮件地址周围的外部parens ()
。 [;.]
改为平原;
分隔符 - 我实际上将该部分更改为;[ ]{0,1}
因为我希望表达式在分号分隔符后匹配空格。 +
符号,并在分隔符(步骤#2)和最后一个关闭paren之间的外部parens ()
与之后的星号 - )*
这是最后的表达式(允许在;
分隔符后面的可选空格:
/^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25}(;[ ]{0,1}([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})*$/
我需要允许在分隔符周围存在空白区域,所以我使用了对Evan Mulawski的答案的修改:
^(([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5}){1,25})+(\\s*[;.]\\s*(([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5}){1,25})+)*$
请在以下网址进行测试: http : //regexlib.com/RETester.aspx?regexp_id = 13126
我用这个:
^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25}(($)|( *;+ *$)|( *;+ *(?=[a-zA-Z0-9_\-\.]))))*$
见这里: http : //www.regular-expressions.info/email.html
该页面讨论了验证一个电子邮件地址的正则表达式; 您可以轻松地概括在那里提出的解决方案,以匹配以分号分隔的列表。
这是另一个^(0-9a-zA-Z @([0-9a-zA-Z] [ - \\ w] [0-9a-zA-Z]。)+ [a-zA-Z] {2, 9})$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.