我有以下代码来测试密码的强度:
import string
def golf(password):
if len(password) >= 10:
if any(char.isdigit() for char in password):
if any(string.punctuation for char in password):
if any(char.isalpha() for char in password):
if any(char.isupper() for char in password):
if any(char.islower() for char in password):
return True
return False
我知道还可以做得更好!它需要测试以下内容...
如果满足以下条件,密码将被视为足够强: 至少有 10 个字符 至少包含一位数字 至少包含一个大写字母 至少包含一个小写字母。密码只能包含 ASCII 拉丁字母或数字,但不能标点符号。
编辑
好吧,对于其他人来说,我用正则表达式将其简化为以下内容。
import re
def golf(password):
return re.match( r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.{10,30}).+$', password)
显然它还可以更短......
最佳答案
事实上,你已经很接近了。是的,您有多种条件需要检查;规则就是这种复杂性。请注意,您不必检查 alpha
:检查 islower
和 isupper
即可覆盖这一点。您可以通过将规则放入单个表达式中来使处理更容易一些:
import string
def golf(password):
return \
len(password) >= 10 and \
any(char.isdigit() for char in password) and \
not any(string.punctuation for char in password) and \
any(char.isupper() for char in password) and \
any(char.islower() for char in password)
请注意,您正在计算 bool 表达式:只需返回该值。无需多言
if <expr>:
return True
else:
return False
您已经拥有手中的值(value);只需返回即可。
关于python - Python 中的密码测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179130/