【发布时间】:2020-02-06 02:46:48
【问题描述】:
我无法让程序检查具有“强密码”的所有因素,而不必进行十亿个 if 语句。
我正在尝试制作一个密码强度程序,其中密码必须具有:
- 至少 10 个字符
- 大小写不一
- 至少一个数字
- 来自“!@#$%^&*”的有效特殊字符
代码:
import re
def passwordChecker(password):
tooShort = "Your password is too short, it must be at least 10 characters"
noNum = "Your password does not have a number. Please add at least one number."
notMixed = "Your password is not mixed case. Please choose a password with mixed case."
noSpec = "Your password does not have a valid special character. Please add at least one valid special character."
if len(password) >= 10 and re.search(r'[0-9]', password) and re.search(r'[A-Z]', password) \
and re.search(r'[a-z]', password) and re.search(r'[$!@%^&*#]', password):
print("Your password is valid")
elif len(password) < 10:
print(tooShort, "\n" +str(noNum), "\n" + str(notMixed), "\n" + str(noSpec))
elif len(password) >= 10 and re.search(r'[A-Z]', password) and re.search(r'[a-z]', password):
print(noNum, "\n" + str(noSpec))
elif len(password) >= 10 and re.search(r'[$!@%^&*#]', password):
print(notMixed, "\n" + str(noNum))
password = str(input("Enter a password: "))
passwordChecker(password)
虽然它有效,但我需要找出一个更好的系统,它更……健壮,我猜?使用正则表达式不是必须的,这只是我最终这样做的方式。
【问题讨论】:
-
简单的答案?不要创建自己的验证。见Reference - Password Validation。
-
如果您的代码有效并且没有问题,请考虑将其发布到Code Review。
标签: regex python-3.x loops if-statement passwords