使用正则表达式来验证电子邮件地址时遇到麻烦

时间:2011-02-03 06:16:07

标签: regex validation email

为了验证电子邮件地址,我使用以下正则表达式 来自www.regular-expressions.info

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

使用上述正则表达式的问题是,我可以成功验证电子邮件地址的双重'@',如下所示:

name@surname@gmail.com # Note the double '@'
test@gmail@com.com

... 我不想要。那么,我该如何调整呢?


更新

我还发现正则表达式不会拒绝这样的电子邮件地址:

name@gmail
test@surname@gmail

2 个答案:

答案 0 :(得分:3)

您当前的正则表达式匹配任何包含有效电子邮件的字符串。您的输入字符串nome@surname@gmail.com包含有效的电子邮件surname@gmail.com

您需要将开始锚点(^)和结束锚点($)添加到正则表达式,以便正则表达式与完整字符串匹配,而不是适当的子串

尝试:

^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$

答案 1 :(得分:0)

假设您“可能”使用.net,这是我用于验证电子邮件地址的正则表达式。

^([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})$