Python 3.x 强密码检测正则表达式

Python 3.x 强密码检测正则表达式,python-3.x,Python 3.x,这是从《用python自动化无聊的东西》第7章开始的。有人能解释一下我做错了什么吗?由于某些原因,我的正则表达式不能按预期工作 下面是完整的问题:编写一个使用正则表达式的函数,以确保传递的密码字符串是强的。强壮的 密码定义为至少八个字符长的密码,包含大写和小写 字符,并且至少有一个数字。您可能需要针对多个正则表达式模式测试字符串以 验证其强度。您打算断言一系列密码要求,但您当前的正则表达式实际上并没有做出这些断言。一种方法是为每个需求添加积极的前瞻: #!/usr/bin/env python3

这是从《用python自动化无聊的东西》第7章开始的。有人能解释一下我做错了什么吗?由于某些原因,我的正则表达式不能按预期工作

下面是完整的问题:编写一个使用正则表达式的函数,以确保传递的密码字符串是强的。强壮的 密码定义为至少八个字符长的密码,包含大写和小写 字符,并且至少有一个数字。您可能需要针对多个正则表达式模式测试字符串以
验证其强度。

您打算断言一系列密码要求,但您当前的正则表达式实际上并没有做出这些断言。一种方法是为每个需求添加积极的前瞻:

#!/usr/bin/env python3

import re

passRegex = re.compile(r'''(
        .{8,}                     # 8 or more characters
        [A-Z]                     # at least 1 A-Z char
        [a-z]                     # at least 1 a-z char
        [0-9]                     # at least 1 0-9 number
        )''', re.VERBOSE)

    
def strong_password():
    password = input("Enter a password: ")
    match = passRegex.search(password)
    if (not match):
        print("Password not strong enough")
        return False
    else:
        print("Password is strong")
        return True

strong_password()

@Tim的答案很好地展示了regex的预期效果,这个答案将特别强调为什么您当前的模式不起作用

Regex对于排序非常具体。 让我们浏览一下你的正则表达式

{8,}
最多匹配8次任何字符

[A-Z]
之后,查找单个大写字母

[a-z]
之后,查找单个小写字母

[0-9]
之后,查找单个0-9整数

排序很重要。您的正则表达式唯一匹配的是这样的密码:

1234AbCdAa8


8个或更多的字符,后跟一个大写字母、一个小写字母和一个数字。任何与该模式不匹配的字符串都不会在您的正则表达式中注册为匹配项。

“按预期”,可能会按照您的意愿列出一些输入/输出示例,并解释代码在哪个输入上产生错误的输出?顺便说一句,
如果不是b那么else
等同于
如果b那么else
对不起。下面是一个示例:$python3 strongPassword.py输入密码:qweQWE123 password不够强。我希望这是一个强大的密码。为什么?当我使用upper=re.compile[A-Z]lower=re.compile[A-Z]等单独传递这些值时,它会工作。
passRegex = re.compile(r'^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$', re.VERBOSE)