使用正则表达式验证Python/Django中的姓名和电子邮件<email@example.com>
我想知道怎么才能验证一个完整的电子邮件地址,同时还要包含名字(可以选择性地加上姓氏或者多个姓氏)。
比如说,像“John Doe <john@doe.org>”或者“Jane <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”。
1 个回答
1
我假设在开始的时候并不知道名字,所以我不会尝试用正则表达式来匹配(也就是检查提供的名字和邮箱中@符号前的字符是否相同)。
>>> 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