验证名称姓氏<;email@example.com&燃气轮机;在Python/Django中使用正则表达式

验证名称姓氏<;email@example.com&燃气轮机;在Python/Django中使用正则表达式,python,django,Python,Django,我想知道如何验证一个完整的电子邮件地址和一个电子邮件地址 例如,John Doe或Jane都应正确验证,而缺少姓名则无法验证,例如 我正在使用Django,所以Python正则表达式就可以了,我没有发现Django中内置了任何这样的验证器 谢谢 编辑: 要进一步说明这个问题,我如何做到: regex=re.compile('^(?P<name>[\w ]+)<(?P<email>[^ ]+@[^.]+\.[\w.]+)>$', re.UNICODE) reg

我想知道如何验证一个完整的电子邮件地址和一个电子邮件地址

例如,John Doe或Jane都应正确验证,而缺少姓名则无法验证,例如

我正在使用Django,所以Python正则表达式就可以了,我没有发现Django中内置了任何这样的验证器

谢谢

编辑: 要进一步说明这个问题,我如何做到:

regex=re.compile('^(?P<name>[\w ]+)<(?P<email>[^ ]+@[^.]+\.[\w.]+)>$', re.UNICODE)

regex.match('José Peréz <jose.perez@example.com>')
regex=re.compile(“^(?P[\w]+)$”,re.UNICODE)
regex.match('JoséPeréz')

匹配??re.UNICODE并没有起到作用。以上仅与“Jose Perez”匹配

我假设名字/姓氏事先不知道,因此我不会尝试进行正则表达式组匹配(匹配提供的名称和电子邮件中@符号前的字符,使其相等)


我假设名字/姓氏没有提前知道,所以我不会尝试进行正则表达式组匹配(匹配提供的名称和电子邮件中@符号前的字符相等)


所以是否要验证该名称是否为电子邮件地址的一部分?还是要分别验证这两者?我看不出电子邮件与此问题有什么关系…我想验证电子邮件部分(必须包含在中)是否至少有一个非空字符串作为前缀。因此,必须进行两次验证:1)字符串的形式为:something1 2)something2是有效的电子邮件。希望这能澄清这一点。Cheers Sminitech,电子邮件因为使用字符而丢失,因此消息看起来非常不清楚,我重新编辑了主文本。对不起,好吧。我应该看看的,对不起,所以。。。是否要验证该名称是否为电子邮件地址的一部分?还是要分别验证这两者?我看不出电子邮件与此问题有什么关系…我想验证电子邮件部分(必须包含在中)是否至少有一个非空字符串作为前缀。因此,必须进行两次验证:1)字符串的形式为:something1 2)something2是有效的电子邮件。希望这能澄清这一点。Cheers Sminitech,电子邮件因为使用字符而丢失,因此消息看起来非常不清楚,我重新编辑了主文本。对不起,好吧。我应该看看的,对不起,谢谢你!这就是关键,我需要改进的一件事,unicode字符匹配。由于许多语言都包含特殊字符,而且通常在名称中,因此我也需要允许这样做。我一直在尝试这个:re.compile(“^(?P[^\W\d\s]+)+$”,re.UNICODE),但它并没有给我想要的,我想我缺少正确的空间分配……有什么想法吗?@Rok:在正则表达式方面,像问题中的例子这样清晰的例子真的很有帮助。看看“(?P[^\W\d\s]+)”,你似乎说一个名字不应该包含空格(例如“John Doe”)。这个正则表达式将失败,因为您忽略了名称和“”之间的空格。这并不是说我不想在google上搜索内容:),但在花了45分钟试图找到如何在单个[]条件中混合包含和排除之后,我放弃了。有人知道我怎么写这个条件[^\W]+吗,它也允许空格?[^\W]+和[\W]+不一样吗?你基本上是说捕获所有非文字字符。谢谢live2bshiv!这就是关键,我需要改进的一件事,unicode字符匹配。由于许多语言都包含特殊字符,而且通常在名称中,因此我也需要允许这样做。我一直在尝试这个:re.compile(“^(?P[^\W\d\s]+)+$”,re.UNICODE),但它并没有给我想要的,我想我缺少正确的空间分配……有什么想法吗?@Rok:在正则表达式方面,像问题中的例子这样清晰的例子真的很有帮助。看看“(?P[^\W\d\s]+)”,你似乎说一个名字不应该包含空格(例如“John Doe”)。这个正则表达式将失败,因为您忽略了名称和“”之间的空格。这并不是说我不想在google上搜索内容:),但在花了45分钟试图找到如何在单个[]条件中混合包含和排除之后,我放弃了。有人知道我怎么写这个条件[^\W]+吗,它也允许空格?[^\W]+和[\W]+不一样吗?您基本上是说捕获所有非文字字符。
>>> 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