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

Python 我的密码强度检查程序可以减少吗,python,regex,python-3.x,Python,Regex,Python 3.x,我做了一个密码强度检查 代码: 我试着让它在我的水平上尽可能短。 我可以减少多少代码行?更短!=更好。但是可以,它可以更短更好,例如: if (all(re.search(p, text) for p in ['[A-Z]', '[a-z]', '[0-9]', '[~!@#$%^&*()]']) and len(text) >= 8): 您完全可以将表达式组合成一个正则表达式: expr = re.compile('(^[^A-Z]$)|(^[^a-z]$)|(

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

我试着让它在我的水平上尽可能短。
我可以减少多少代码行?

更短!=更好。但是可以,它可以更短更好,例如:

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

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

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

我投票结束这个问题,因为它更适合@Bart Kiers,但事实并非如此。代码审查并不是为了帮助代码混淆/打高尔夫球:“……询问代码混淆、混淆或类似问题是离题的。”()如果目标是代码高尔夫,那么可能应该转移到-但我认为这里的问题是OP没有明确说明他的目标(这有什么好处“减少代码行数”在这里?@Coal,我不认为OP想要混淆代码。只是用更少的LOC来写。减少“!=”混淆“.Random cycle golfing:如果使用元组而不是列表,则可以在编译时构建它。但这并不重要,因为代码无论如何都会在每次运行时编译正则表达式。反对:[]的主参数与用于调用的()相反。顺便说一句,if中不需要外圆括号(尽管我猜它们是用于换行符的,而且看起来确实比反斜杠好)。Python缓存正则表达式,因此它不会每次编译。除非我在行尾加上斜杠,否则需要外圆括号。你的想法很有趣。但是正则表达式中的复杂逻辑很难正确,而且通常是个坏主意。举个例子:您在
[^a-Z]
之前忘记了一个
^
,因此如果我在您的密码末尾添加一个不是大写字母的字符,则该字符将无效。@Alexall谢谢,不知道它是如何丢失的。。。关于复杂性的观点很好,但对于只编译和搜索一次的场景来说,这是一个不错的选择。
if(no_lowercase or no_uppercase or no_digit or no_symbol or 7chars_or_fewer):
  #it's invalid
else:
  #it's valid