2013-03-22 48 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對於文字邊界的電子郵件之前和之後?

相關問題