(([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)(\s*;\s|\s*,\s*|\s*$))
我有这个正则表达式验证电子邮件
我正在使用http://www.regextester.com/来测试它。所以它有效
sadas@asd.com; asdas@c.com; asdasda@casc.com; asjdas@asc.com, asdas@asd.com
但是如果客户会写那个
asjdas@asc.com,asdas@asd.com
它说这是假的。我怎么能这样做?
答案 0 :(得分:0)
基本上,你需要做的是,通过在它们之前放一个反斜杠(.
)来逃避所有点(\
)(因为你匹配一个文字点) ,而不是any character)。因此,以下正则表达式将起作用:
(([a-zA-Z0-9_\-\.]+)@(([[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)(\s*;\s|\s*,\s*|\s*$))
答案 1 :(得分:0)
这不符合预期的原因是您没有正确转义域捕获中的.
。
默认情况下,.
表示“任意字符”,其中\.
表示“句点字符”。
目前asjdas@asc.com,asdas@asd.com
匹配为:
[a-zA-Z0-9_-.]+
应该是[a-zA-Z0-9_\-\.]+
或将短划线移到开头[-a-zA-Z0-9_\.]+
,因此不会将其视为范围。)([a-zA-Z0-9-]+.)+
因此,,
和第二个@
都将此推送到那里的3项。
也就是说,正如其他人所提到的,这是一个相当奇怪的正则表达式,用于从字符串中捕获电子邮件 - 并留下一些有效的电子邮件 - 例如TLD现在可以是任意长度({{1} } .museum
是我遇到的两个,有plenty more),.aero
现在在电子邮件地址的名称部分很常见。
following regex将获取所有电子邮件地址,以及字符串中的电子邮件地址:
'
这将忽略空间,处理通用和品牌TLD,并且还提供对基于IP的电子邮件的有限支持(例如neb@123.123.123),但对于有效的电子邮件(即带有撇号,加号,等)和无效IP(超过256的任何八位字节)。