我有一个电子邮件地址列表,我想检查它们是否是GMail的有效电子邮件地址。
可能的电子邮件地址
"admin@gmail.com"
"john.smith@googlemail.com"
"john5.a.smith@gmail.com"
"jane_doe@googlemail.com"
"patrick.o'reilly@gmail.com"
但以下不是有效的电子邮件地址
".admin@gmail.com"
"postmaster.@gmail.com"
这就是我所拥有的字符串,以a-z或0-9开头,后跟零或更多任何特殊字符。
re.search("^[a-z0-9]+[\.'\-]*[a-z0-9]+@(gmail|googlemail)\.com$", s)
但是它失败了
"john5.a.smith@gmail.com"
答案 0 :(得分:2)
这是一个棘手的事情,并且很难或不可能正确地使用正则表达式,因为它很快失控。在设计过滤器时,您将不得不权衡对假阳性和阴性的担忧,并根据您的喜好做出任何决定。 认为这种过滤器在100%的时间都能正常工作是不正确的。
根据您的要求,您应该做出以下决定:
它再次取决于您的要求,但我建议不要过滤。即使在电子邮件声誉受到关注的情况下,除非您向相同数量的好地址和坏地址发送电子邮件,否则这是更好的选择。
与您发布的内容不同:
admin@gmail.com
是非法地址postmaster.@gmail.com
会收到邮件。这表明很难做到这样的事情。那(在我看来)你不应该尝试。 即使是“简单”和“明显”的东西,通常也只是在古怪的电子邮件世界中。
重要的是要注意dots don't matter in gmail addresses。
Gmail无法将点识别为用户名中的字符,您可以 在不更改地址的情况下添加或删除Gmail地址中的点 实际目的地址;他们都会去你的收件箱,而且只是 你的。简而言之:
homerjsimpson@gmail.com = hom.er.j.sim.ps.on@gmail.com homerjsimpson@gmail.com = HOMERJSIMPSON@gmail.com homerjsimpson@gmail.com = Homer.J.Simpson@gmail.com
对我的个人电子邮件进行快速测试已确认电子邮件已发送 前导点或尾随点遵循这一原则:
homerjsimpson@gmail.com = .homerjsimpson@gmail.com
homerjsimpson@gmail.com = homerjsimpson.@gmail.com
homerjsimpson@gmail.com = homerjsimpson.....@gmail.com
工作,并交付。
您必须区分有效的Gmail用户名和有效的Gmail地址。它们不是一回事。
仅仅因为您无法使用某些字符串注册用户名并不意味着在@gmail.com
前放置相同的字符串将不会发送电子邮件。
其他一些观点:
admin@gmail.com
实际上是非法地址。 bob@gmail.com
等根据本指南也是非法的,虽然“显然是合法的”。homerjsimpson+stackoverflow@gmail.com
很高兴地传递给homerjsimpson@gmail.com
。答案 1 :(得分:1)
请改用:
^[a-z0-9]+[\.'\-a-z0-9_]*[a-z0-9]+@(gmail|googlemail)\.com$
在Regex101.com上测试: