[英]Python Password Validation: Unable to use constants from string library in regex
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
with 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)
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.