【问题标题】:Regular Expression for Look ahead Password [duplicate]前瞻密码的正则表达式 [重复]
【发布时间】:2019-09-25 11:20:26
【问题描述】:

我一直在尝试为这项任务学习正则表达式。我已经使用前瞻来找到这三个条件。

  1. 检查小写(?=.*[a-z])
  2. 检查大写(?=.*[A-Z])
  3. 检查数字(?=.*[0-9])

这个案例工作正常。当我结合我得到

(?=.\*\d)(?=.\*[a-z])(?=.*[A-Z])

这对于包含数字、a-z 和 A-Z 的任何字符串都返回 true。但我只需要包含字母数字的正则表达式。我试过这个正则表达式

^(?=.\*\d)(?=.\*[a-z])(?=.*[A-Z])$

但这不起作用。任何人都可以帮助解释为什么这个正则表达式不适用于组合。

编辑: 我的疑问是为什么 ^$ 在我组合时不起作用

【问题讨论】:

  • 我查过了。我不明白为什么我的正则表达式不起作用。那里没有解释
  • Lookarounds 只是寻找匹配,但实际上不消耗任何字符。您的正则表达式只是缺少实际使用字符的部分,即您需要将 .{8,} 放在 $ 之前的部分,假设您的密码至少需要 8 个字符。
  • 您不应限制密码包含非字母数字字符。那只会让他们不那么安全。而且几乎没有充分的理由这样做。
  • 抱歉,我错过了那部分

标签: regex


【解决方案1】:

这里的正则表达式应该是

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]*$

您需要添加实际的文本匹配部分。

Lookaheads 仅用于检查某事物是否跟随其他事物,而不使其成为匹配的实际部分。因此,为了使其工作,您需要指定正则表达式的实际匹配部分。那部分是[a-zA-Z0-9]*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多