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

时间:2018-03-24 08:46:26

标签: python regex python-3.x

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

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")

我试图让它在我的水平上做得很短。 我能在多长时间内减少代码行数?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

你绝对可以将表达式组合成一个正则表达式:

MyClass = R6Class(
   "MyClass",
   public = list(
      initialize = function() {
      }
   ),
   private = list(
   )
)

setMethod('+', signature("MyClass"), function(e1, e2)1)
a = MyClass$new()
a+a

请注意,表达式中的布尔值使用等式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