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

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

要求是:

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

【问题讨论】:

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

标签: c# regex c#-2.0


【解决方案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 条件检查独立表达式,因为语法更易于阅读和理解.

【讨论】:

    猜你喜欢
    • 2020-12-24
    • 2011-07-24
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多