Python密码验证:无法在正则表达式中使用字符串库中的常量

问题描述 投票:0回答:1
def check_password(pw):
    global reason
    while True:
        if not re.search(string.ascii_lowercase,pw):
            flag = False
            reason = get_error(4)
            break

        elif not re.search(string.ascii_uppercase, pw):
            flag = False
            reason = get_error(1)
            break

        elif not re.search(string.digits, pw):            
            flag = False
            reason = get_error(2)
            break
        elif not re.search(string.punctuation, pw):          
            flag = False
            reason = get_error(3)
            break
        else:
            flag = True
            print("Valid Password") 
            break
        return flag

flag = False
min_length = 5

#password = input("Please enter your password:")
password = getpass.getpass("Enter Password:")

if len(password) >= min_length:
    check_password(password)
    print(password)
    if flag == True:
        print("Valid Password!")
    else:
        print(reason)
else:           
    print("Your password is not long enough.")

这里我使用正则表达式来验证密码。如果我对模式“ [AZ]”,“ [0-9]”进行硬编码,我就成功了,但是现在,如果我使用字符串库常量,那么无论密码有什么其他错误,我都会从第一个检查中得到消息。

您能在语法上还是语义上告诉我哪里错了?

python regex string
1个回答
0
投票
因此,您需要将string.ascii_lowercase替换为f"[{string.ascii_lowercase}]",将string.ascii_uppercase替换为f"[{string.ascii_uppercase}]",将string.digits替换为f"[{string.digits}]",将string.punctuation替换为f"[{string.punctuation.replace("\\", "\\\\").replace("-", r"\-").replace("^", r"\^").replace("]", r"\]")}]"

如果您的Python环境低于3.7,并且不支持字符串插值,请使用str.format,例如if not re.search(r"[{}]".format(string.ascii_lowercase),pw),依此类推。

© www.soinside.com 2019 - 2024. All rights reserved.