我目前正在使用正则表达式单独检查它们,所以我更喜欢使用re来回答。
我用来分别找到它们的一个例子:
if re.search(r'[A-Z]', userpass):
score += 5
但是,我想检查变量是否包含所有参数(大写/小写以及符号和数字),因此使用re.search每次都会返回true,因为它只检查例如是否有一位数但我想检查是否有数字,大写和小写以及符号。我想要检查的符号是:!$%^& *() - _ = +
也是为了澄清,我对python很新,所以除了基本的东西之外几乎所有东西都是我的新东西所以我使用正则表达式,因为我发现它非常简单
答案 0 :(得分:0)
我认为它可能更适合不使用正则表达式。相反,我只会使用all()
和any()
:
checks = [[chr(c) for c in range(97, 123)] + [chr(c) for c in range(65, 91)], list("!$%^&*()-_=+"), [str(i) for i in range(10)]]
if all(any(c in check for c in userpass) for check in checks):
score += 5
答案 1 :(得分:0)
对于非正则表达式解决方案,您可以使用以下内容:
def check_userpass(userpass):
has_lower = userpass.upper() != userpass
has_upper = userpass.lower() != userpass
has_number = any(ch.isdigit() for ch in userpass)
has_symbol = any(ch in "!$%^&*()-_=+" for ch in userpass)
return has_lower and has_upper and has_number and has_symbol
答案 2 :(得分:0)
没有正则表达式:
cond1 = any(c.isalpha() for c in password)
cond2 = any(c.isnumber() for c in password)
cond3 = any(word in password for word in '!$%^&*()-_=+')
valid = cond1 and cond2 and cond3
答案 3 :(得分:0)
一种方法是使用any
而不是正则表达式
if any(c.isupper() for c in userpass) and any(c.islower() for c in userpass) and any(c.isdigit() for c in userpass) and any(c in '!$%^&*()-_=+' for c in userpass):
...
但这可能会变得相当冗长。如果我们的检查是函数我们可以传递字符,我们可以做
def ispunc(c):
return c in '!$%^&*()-_=+'
criteria = (str.isupper, str.islower, str.isdigit, ispunc)
if all(any(check(c) for c in userpass) for check in criteria):
...