是否有一个好方法来检查表单输入使用正则表达式,以确保它是一个正确的风格的电子邮件地址?从昨晚开始搜索,每个人都回答了关于这个话题的问题,如果它是一个子域名的电子邮件地址,似乎也有问题。
当前回答
"^[\w\.\+\-]+\@[\w]+\.[a-z]{2,3}$"
其他回答
这通常是使用正则表达式解决的。然而,有许多不同的解决方案。这取决于您需要的严格程度,以及您是否有自定义的验证要求,或者是否接受任何有效的电子邮件地址。
参考页面:http://www.regular-expressions.info/email.html
电子邮件验证
import re
def validate(email):
match=re.search(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9.]*\.*[com|org|edu]{3}$)",email)
if match:
return 'Valid email.'
else:
return 'Invalid email.'
电子邮件地址非常复杂。下面是一个匹配每个rfc822有效地址的示例正则表达式: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html
您会注意到它可能比程序的其他部分要长。甚至还有用于验证电子邮件地址的Perl完整模块。所以你可能不会得到任何东西,100%完美的正则表达式,同时也可读。下面是一个递归下降解析器示例: http://cpansearch.perl.org/src/ABIGAIL/RFC-RFC822-Address-2009110702/lib/RFC/RFC822/Address.pm
但是您需要决定是需要完美的解析还是简单的代码。
没有任何意义。即使您可以验证电子邮件地址在语法上是有效的,您仍然需要检查它是否没有输入错误,并且它实际上是发送给您认为的那个人的。唯一的方法就是给他们发一封电子邮件,让他们点击一个链接来验证。
因此,最基本的检查(例如,他们没有不小心输入他们的街道地址)通常就足够了。比如:它只有一个@符号,而且至少有一个。在@:后面的部分
[^@]+@[^@]+\.[^@]+
您可能还想禁止使用空格——可能有一些有效的电子邮件地址中有空格,但我从未见过,所以这是用户错误的可能性在您这边。
如果你想要完整的支票,看看这个问题。
更新:以下是如何使用任何这样的正则表达式:
import re
if not re.match(r"... regex here ...", email):
# whatever
Python≥3.4有re.fullmatch,它比re.match更可取。
注意字符串前面的r;这样,你就不需要两次逃避了。
如果你有大量的正则表达式要检查,首先编译正则表达式可能会更快:
import re
EMAIL_REGEX = re.compile(r"... regex here ...")
if not EMAIL_REGEX.match(email):
# whatever
另一种选择是使用validate_email包,它实际联系SMTP服务器以验证地址是否存在。不过,这仍然不能保证它属于正确的人。
在电子邮件输入上使用此过滤器掩码: emailMask: / (\ w .\-@'"!#$%&'*+/=?^ _{|} ~) /我
推荐文章
- 如何删除Python中的前导空白?
- python中的assertEquals和assertEqual
- 如何保持Python打印不添加换行符或空格?
- 为什么Python的无穷散列中有π的数字?
- Python 3.7数据类中的类继承
- 如何在PyTorch中初始化权重?
- 计数唯一的值在一列熊猫数据框架像在Qlik?
- 使用Pandas将列转换为行
- 从matplotlib中的颜色映射中获取单个颜色
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- 使用String.split()和多个分隔符
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?