我想知道如何使用名字(可选的姓氏或几个姓氏)和电子邮件地址验证完整的电子邮件地址。
E.g。 John Doe< john@doe.org>或简< jane@doe.org>两者都应该正确验证,缺少的名称不会在哪里,例如< jane@doe.org>
我正在使用Django这样一个Python正则表达式会做,我没有找到任何这样的验证器内置到Django ......
谢谢!
编辑: 要扩展问题,我该如何做到这一点:
regex=re.compile('^(?P<name>[\w ]+)<(?P<email>[^ ]+@[^.]+\.[\w.]+)>$', re.UNICODE)
regex.match('José Peréz <jose.perez@example.com>')
匹配? re.UNICODE没有做到这一点。以上仅匹配'Jose Perez'
答案 0 :(得分:1)
我假设提前知道姓/名,所以我不会尝试进行正则表达式组匹配(匹配提供的名称和电子邮件中@符号前的字符相等)。< / p>
>>> import re
>>> name_email_matcher = re.compile('^(?P<name>[A-Za-z ]+)<(?P<email>[^ ]+@[^.]+\.[\w.]+)>$')
>>> inp = 'John <john@doe.org>'
>>> inp2 = '<jane@doe.org>'
>>> print (name_email_matcher.match(inp) is not None)
True
>>> print (name_email_matcher.match(inp2) is not None)
False
修改名称的字符类,使其不仅仅是字母和空格。同样对于电子邮件,我根据您的问题设计了类。
您可以通过以下方式使用相同的正则表达式提取名称/电子邮件:
>>> match = name_email_matcher.search(inp)
>>> if match is not None:
... print match.group('name')
... print match.group('email')
John
john@doe.org