我做了一个密码强度检查器 代码:
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")
我试图让它在我的水平上做得很短。 我能在多长时间内减少代码行数?
答案 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