至少需要两个要求的密码正则表达式
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.",否则很容易形成多个先行。因此,我们需要一些额外的逻辑。
比如说,你有这三个条件 a
、b
、c
和 d
并且其中两个的组合就足够了,那么我们可以将表达式表达为
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 条件检查独立表达式,因为语法更易于阅读和理解。
我搜索了整个网络,但找不到适合这种情况的任何正则表达式。我需要正则表达式来检查密码是否满足至少两个给定要求
要求是:
1个数字
1 个小写字符
1 个特殊字符(!?€%& 等)
1 个大写字符
问题来自"At least two of these requirements are enough for my password.",否则很容易形成多个先行。因此,我们需要一些额外的逻辑。
比如说,你有这三个条件
a
、b
、c
和 d
并且其中两个的组合就足够了,那么我们可以将表达式表达为
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 条件检查独立表达式,因为语法更易于阅读和理解。