2015-12-08 163 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])+)\]) 
相关问题