2013-03-22 73 views
0

我目前使用下面的代码:如何检查字符串是否为电子邮件?

regexp = re.compile(r'[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}', re.IGNORECASE) 
email = regexp.findall(stext) 
if email: 
    email = email[0] 

但即使stext包含一些其他的文本以及除了电子邮件,将工作(为前,some text [email protected] some other text)。当我想检查是否stext包含[email protected]只有(好的,可能与前导或/和尾随空格,没有其他字符)。

PS。我也认为可能我应该使用mail.is_email_valid而不是正则表达式,它will allow我支持像.museam这样的长域或者像.рф这样的本地域。

+0

可以使用'^'和'$'特殊字符分别匹配字符串的开头和结尾。就像'r'^ [A-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] + \。[A-Z] {2,4} $''会让你开始。 – jedwards 2013-03-22 19:07:18

+0

http://docs.python.org/2/library/re.html#search-vs-match – 2013-03-22 19:54:25

回答

3

您需要在开始时添加^,这意味着“文本从这里开始”,最后$是“在此之后没有更多文本”。

这将使:

r'^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$'

+1

不考虑“好吧,可能带有前导或/和尾随空格,没有其他字符”......添加^之后和$之前的'\ s *'会更好。 – isedev 2013-03-22 19:13:57

+0

好主意,虽然有空格,但它不是一个有效的电子邮件。也许在做任何事情之前修剪用户输入更好。例如,这也可以解释用数据库中的空格保存电子邮件 – baloo 2013-03-22 19:18:20

0

你为什么不使用\ b对于文字边界的电子邮件之前和之后?

相关问题