需要至少两个要求的密码的正则表达式[关闭]

Posted

技术标签:

【中文标题】需要至少两个要求的密码的正则表达式[关闭]【英文标题】:Regex for password that needs at least two of the requirements [closed] 【发布时间】:2020-04-23 13:39:45 【问题描述】:

我搜索了整个网络,但找不到任何适合这种情况的正则表达式。我需要正则表达式来检查密码是否满足至少两个给定要求

要求是:

1 位数字 1 个小写字符 1 个特殊字符(!?€%& 等) 1 个大写字符

【问题讨论】:

有无数个重复项。你搜索过它们吗? 欢迎来到 ***。请注意,这不是免费的代码编写服务。如果您有一些无法运行的代码或有具体问题,我们将为您提供帮助。另见How to Ask 为什么需要为此使用正则表达式? 【参考方案1】:

问题在于“这些要求中至少有两个就足够我的密码了。”,否则很容易形成多个前瞻。因此,我们需要一些额外的逻辑。


假设你有abcd这三个条件,并且它们的两个组合就足够了,那么我们可以将表达式表述为
a&b | a&c | a&d | b&c | b&d | c&d

其中& 代表... and ...| 代表... or ...。 根据您的要求,这将是(请参阅a demo on regex101.com):

^
(?:
    (?:(?=\D*\d)(?=[^a-z]*[a-z]))
    |
    (?:(?=\D*\d)(?=[^!?€%&]*[!?€%&]))
    |
    (?:(?=\D*\d)(?=[^A-Z]*[A-Z]))
    |
    (?:(?=[^a-z]*[a-z])(?=[^!?€%&]*[!?€%&]))
    |
    (?:(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]))
    |
    (?:(?=[^!?€%&]*[!?€%&])(?=[^A-Z]*[A-Z]))
)
.+
$

但是:不要使用这个怪物表达式,而是以编程方式执行:使用 if 条件检查独立表达式,因为语法更易于阅读和理解.

【讨论】:

以上是关于需要至少两个要求的密码的正则表达式[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

密码策略的正则表达式 [关闭]

正则表达式匹配具有两个或多个特殊字符的强密码

用于密码验证的正则表达式,仅特定字符 [重复]

python中用正则表达式检查密码是否安全

如何在 Python 中测试正则表达式密码?

至少一个大写字母、一个小写字母、一个数字或特殊字符的正则表达式