不确定是否有可用但无法找到的解决方案。所以再问一遍。
我正在写一封电子邮件验证工具。这应该验证所有格式良好的电子邮件(这只是验证电子邮件格式正确的一个级别的验证)。现在我的代码是国际代码,所以我也应该支持非拉丁字符。我如何为此编写最有效的正则表达式?
国际电子邮件:http://en.wikipedia.org/wiki/International_email
一些示例电子邮件:
它应该能够验证所有上述格式
答案 0 :(得分:7)
通过regexp进行电子邮件验证的原因是如此宽松是因为它效率不高。 是电子邮件地址语法的规范,但是the regexp to check it is so long, it's impractical。此外,电子邮件提供商在实现语法方面比实际规范更严格。根据规范说明,电子邮件可能被视为有效,但根据提供商而无效。
这也是存在激活电子邮件的原因,因为检查电子邮件是否有效,现有和当前正在使用的唯一方法是向其发送一些内容,通常是唯一的激活码或链接。只有当使用仅发送到该电子邮件的唯一激活码或链接时,才会认为该电子邮件有效。
在此之前,请考虑更有效的验证电子邮件的方法,检查用户名,@
和域名部分。此外,为什么一个人会使用虚假电子邮件注册?如果他们这样做,他们将无法获得激活链接,并且无法继续创建帐户。
答案 1 :(得分:0)
@Patashu非常感谢。我已经改善了你的正则表达式,现在它完全符合我的需要:
^([^@\s\."'\(\)\[\]\{\}\\/,:;]+\.)*[^@\s\."'\(\)\[\]\{\}\\/,:;]+@[^@\s\."'\(\)\[\]\{\}\\/,:;]+(\.[^@\s\."'\(\)\[\]\{\}\\/,:;]+)+$
答案 2 :(得分:0)
对于Java,这个对我很有用。
"^[\\p{L}\\p{N}\\._%+-]+@[\\p{L}\\p{N}\\.\\-]+\\.[\\p{L}]{2,}$"
在@之后不允许使用IP,但xxx@xxx.TDL
中来自\p{L}
的最有效电子邮件可以通过它验证。
\p{N}
验证UTF-Letters,&!
验证UTF-Numbers。您可以查看this doc以获取更多信息。
答案 3 :(得分:0)
如果您在域和用户名中都没有特殊的字母,字符但带有破折号(-)和数字,则这对我来说适用于Python。如果您有国家/地区扩展名,这也将匹配。
[a-zA-Z0-9 .-] + @ [a-zA-Z-] +。(com | edu | net)(。([[a-z] +))*