gpt4 book ai didi

python - 使用正则表达式检查密码强度

转载 作者:太空狗 更新时间:2023-10-30 00:58:54 25 4
gpt4 key购买 nike

函数是找出密码的强度。在以下情况下,它被认为是强大的:

  1. 长度大于等于10个字符
  2. 它至少包含一个数字
  3. 至少一个大写字母
  4. 一个小写字母
  5. 密码只能包含ASCII拉丁字母或数字

有没有办法减少函数中的代码量? 请帮我把函数的代码缩短到200个字符以内(尽量不给变量赋值解决)

import re
def golf(password):
if len(password) >= 10 \
and re.search("^[a-zA-Z0-9]+", password) \
and re.search("[a-z]+", password) \
and re.search("[A-Z]+", password) \
and re.search("[0-9]+", password):
print(password, True)
return True
else:
print(password, False)
return False


if __name__ == '__main__':
golf('A1213pokl') == False
golf('bAse730onE') == True
golf('asasasasasasasaas') == False
golf('QWERTYqwerty') == False
golf('123456123456') == False
golf('QwErTy911poqqqq') == True
golf('..........') == False

最佳答案

虽然您已经有了答案,但我什至会尝试优化模式。我将直接应用对比原则,而不是 .* 然后回溯:

(?=\D*\d)          # NOT a number, 0+ times, then one number
(?=[^A-Z]*[A-Z]) # NOT an UPPERCASE, 0+times, then an UPPERCASE
(?=[^a-z]*[a-z]) # same with lowercase
^[A-Za-z0-9]{10,}$ # allowed characters, 10+, with anchors on both sides

压缩和 demo :

(?=\D*\d)(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])[A-Za-z0-9]{10,}$

这里的想法是,当 .* 带你回到原点然后回溯时,上面的模式可能会更快结束。


最后是 Python 片段:

import re

def golf(password=None):
rx = re.compile(r'(?=\D*\d)(?=[^A-Z]*[A-Z])(?=[^a-z]*[a-z])[A-Za-z0-9]{10,}$')
return True if rx.match(password) else False

passwords = ['A1213pokl', 'bAse730onE', 'asasasasasasasaas', 'QWERTYqwerty', '123456123456', 'QwErTy911poqqqq', '..........']
vectors = [golf(password) for password in passwords]
print(vectors)
# [False, True, False, False, False, True, False]

关于python - 使用正则表达式检查密码强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47449436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com