至少需要两个要求的密码正则表达式

Regex for password that needs at least two of the requirements

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

要求是:

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

问题来自"At least two of these requirements are enough for my password.",否则很容易形成多个先行。因此,我们需要一些额外的逻辑。


比如说,你有这三个条件 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]))
)
.+
$

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