需要至少两个要求的密码的正则表达式[关闭]
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】:问题在于“这些要求中至少有两个就足够我的密码了。”,否则很容易形成多个前瞻。因此,我们需要一些额外的逻辑。
假设你有
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]))
)
.+
$
但是:不要使用这个怪物表达式,而是以编程方式执行:使用 if 条件检查独立表达式,因为语法更易于阅读和理解.
【讨论】:
以上是关于需要至少两个要求的密码的正则表达式[关闭]的主要内容,如果未能解决你的问题,请参考以下文章