regex python的电子邮件验证代码未给出预期输出

h4cxqtbf  于 2023-06-25  发布在  Python
关注(0)|答案(2)|浏览(91)

对于电子邮件验证,我有以下条件:1.用户名只能是字母数字(a-z,0-9,A-Z)2.网站名称应该是A-Z 3.扩展名应为a-z
我写了一个Python代码:

import re 
def check(email):
    #complete the function
    #the function should return the strings "invalid" or "valid" based on the email ID entered
    if(re.search('^[a-zA-Z0-9]+$@^[a-z]+$.^[a-z]+$',email)):  
        return("valid")  

    else:  
        return("invalid") 

email=input()
print(check(email))

我的输入:vk@google.com但它返回我“无效”它应该返回为“有效”。我做错了什么?

d6kp6zgx

d6kp6zgx1#

您的初始模式将适用于:

^[a-zA-Z0-9]+@[a-z]+\.[a-z]+$

Debuggex Demo
你有:^[a-zA-Z 0 -9]+$@^[a-z]+$.^[a-z]+$,其中你有:

  • 尾弦锚$中弦 *2
  • 起始字符串锚^中间字符串 *2
  • 未转义的.,它将匹配任何字符。使用反斜杠> \.转义

上面显示了为什么你产生零匹配。
要控制@和点之间的字母字符数量,您可以用途:

^[a-zA-Z0-9]+@[a-z]{5,8}\.[a-z]+$
shyt4zoc

shyt4zoc2#

你不能期望行的开始在行的中间。

This is not right
              |         |
'^[a-zA-Z0-9]+$@^[a-z]+$.^[a-z]+$'
                |        |
                       This is the problem

此外,点不转义,导致表达式匹配任何字符。如果你想让它匹配一个字面上的点,那么你必须用一个斜杠来继续它。把那个改成

'^[a-zA-Z0-9]+@[a-z]+\.[a-z]+$'

相关问题