6

我想用正则表达式检查复杂的密码。

它应该有 1 个数字 1 大写和一个小写字母,不按特定顺序。所以我虽然是这样的:

m = re.search(r"([a-z])([A-Z])(\d)", "1Az")
print(m.group())

但我不知道如何告诉他按任何顺序搜索。我试图在网上看,但我没有找到有趣的东西,谢谢你的帮助。

4

2 回答 2

10

您可以尝试寻找密码验证正则表达式,该网站有很多;)

也就是说,您可以使用积极的前瞻来做到这一点:

re.search(r"(?=.*[a-z])(?=.*[A-Z])(?=.*\d)", "1Az")

并实际匹配字符串...

re.search(r"(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{3}", "1Az")

现在,要确保密码长度为 3 个字符:

re.search(r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{3}$", "1Az")

积极的前瞻(?= ... )确保内部的表达式存在于要测试的字符串中。因此,字符串必须有一个小写字符 ( (?=.*[a-z]))、一个大写字符 ( (?=.*[A-Z])) 和一个数字 ( (?=.*\d)),正则表达式才能“通过”。

于 2013-09-22T14:33:50.863 回答
3

为什么不只是:

if (re.search(r"[a-z]", input) and re.search(r"[A-Z]", input) and re.search(r"[0-9]", input)):
    # pass
else
    # don't pass
于 2013-09-22T14:36:18.540 回答