2015-12-08 90 views
-3

我試圖創建一個程序,它檢查電子郵件的驗證,看它是否以小寫字母開頭,包含「@」符號和「.com」或一個「.co.uk」。我將如何做到這一點。Python正則表達式檢查是否包含特定字符

我的網絡很滑稽,因此我無法檢查在線表達。

這是我到目前爲止有:

def valid_email(): 
    email_address = input("Enter your email: ") 
    valid = re.match("[a-z]",email_address) 
    if valid: 
     print("That looks OK") 
    else: 
     print("Invalid, must be lowercase and contain an '@' sign") 
     valid_email() 
valid_email() 
+0

你是唯一尋找小寫字母,所以我懷疑你需要擔心檢查,你不檢查'@'或字符串以.com或.co.uk結尾 –

+0

有許多許多現有的電子郵件驗證正則表達式在那裏 - 是否有任何特定的原因,你想要推出自己的?在這些情況下最好不要嘗試重新發明輪子。 – Lix

+0

這將幫助你 - http://stackoverflow.com/questions/8022530/python-check-for-valid-email-address –

回答

0

你可以寫一個正則表達式,如valid = re.match(r"[a-z0-9][email protected][a-z]+\.(com|co.uk)",email_address)

此,如果您的電子郵件如下,你所提到的模式將檢查。

爲了進一步驗證,如以小寫字母開始,包含一個「@」符號,而「.COM」或「.co.uk」,你可以把條件像

 if '@' not in email_address: 
     print "Must contain @" 

同樣你可以把各種條件。

+0

你假設localparts不能包含點,或加號,或破折號,或許多其他有效標點符號。即使在大量常見的'gmail.com'地址上,這也會失敗(因爲這些地址在本地部分通常有一個點)。許多有效的域名(包括.com和'.co.uk「頂級域名)以及子域名也是如此。 – tripleee

+0

我知道所有這些考慮因素。我只是回答了上述有關他在電子郵件地址中預期的問題。 –

-2

你的正則表達式的表達式中包含以下語句:

  • 僅有1「@」符號(可以寫成像「@」)
  • 1個或多個「AZ」字母開頭(可(可以寫成[^ @] +)
  • 「.com」或「.co.uk」的1(可以寫爲[az] +)
  • as。[^ @] +)

所以,你的正則表達式的表達應該是這樣的:

valid = re.match(r"[a-z]+[^@]+?\.[^@]+", email_address) 
0

有了這樣說,你的代碼所做的就是之間搜索任意字符A-Z和停止。 也就是說,如果一個地址是[email protected],你的正則表達式就會開始,看到在開頭有一個'b'符合[a-z]並停止。

而是使用'[a-z]+'這將繼續搜索,直到它達到.
@標誌是強制性的,因此應儘可能是。 現在正則表達式變得'[a-z][email protected]'
現在爲域的驗證,使用:'[\w.]+[a-z]+'
因此,最終的正則表達式語句(按您的要求)變爲:
re.match(r'[a-z][email protected][\w.]+[a-z]+')

但上面是非常弱的正則表達式和不包括_.,可能會在用戶名字段中冒用。我強烈建議你使用已經可用於電子郵件驗證的正則表達式,而不是試圖自己創建。

下面是完整的電子郵件驗證正則表達式是什麼樣子(對於Python):

r"(^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)" (從http://emailregex.com/

而這裏的普通電子郵件正則表達式:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) 
相關問題