我的密码强度检查程序可以减少吗

2024-09-27 07:25:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个密码强度检查 代码:

import re

upper = re.compile(r'[A-Z]')
lower = re.compile(r'[a-z]')
digit = re.compile(r'[0-9]')
special_char = re.compile(r'[~!@#$%^&*()]')

# text = 'd3F#$%^&232sdsGDFD'
text = input("Enter a password to check it's strength\n")

digit_check = digit.search(text)
upper_check = upper.search(text)
lower_check = lower.search(text)
special_char_chk = special_char.search(text)

if digit_check and upper_check and lower_check and special_char_chk and len(text)>=8:
    print("Valid password\nPassword is:" + text)
else:
    print("Innvalid")

我尽量把它缩短到我的水平。 我可以减少多少代码行?你知道吗


Tags: and代码textresearchcheckpasswordupper
2条回答

您完全可以将表达式组合成一个正则表达式:

expr = re.compile('(^[^A-Z]$)|(^[^a-z]$)|(^[^0-9]$)|(^[^~!@#$%^&*()]$)|(^.{0,7}$)')
if expr.search('a99@999B'):
    print('Invalid')
else:
    print('Valid')

请注意,表达式中的布尔值是使用公式a & b = !a | !b组合的。所以基本上,这是在寻找:

if(no_lowercase or no_uppercase or no_digit or no_symbol or 7chars_or_fewer):
  #it's invalid
else:
  #it's valid

矮一点!=更好。但是,它可以做得更短更好,例如:

if (all(re.search(p, text) for p in ['[A-Z]', '[a-z]', '[0-9]', '[~!@#$%^&*()]']) and
        len(text) >= 8):

相关问题 更多 >

    热门问题