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]”进行硬编码,我就成功了,但是现在,如果我使用字符串库常量,那么无论密码有什么其他错误,我都会从第一个检查中得到消息。
您能在语法上还是语义上告诉我哪里错了?
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)
,依此类推。