【问题标题】:Regex for combination of given rules给定规则组合的正则表达式
【发布时间】:2016-12-06 11:21:04
【问题描述】:

我正在尝试编写正则表达式来验证给定规则的密码。

密码长度必须至少为 8 个字符,并且至少包含以下 4 种字符中的 3 种:

  • 小写字母(即 a-z)
  • 大写字母(即 A-Z)
  • 数字(即 0-9)
  • 特殊字符(例如 !@#$&*)

我正在通过this 讨论并发现this 那里的答案非常好。

现在我正在尝试为上述要求编写正则表达式,我想出了这样的解决方案

^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}|
(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,}|
(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z]).{8,}|
(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[a-z]).{8,}|
(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9]).{8,}$

它运行完美,请参阅rubular,但我想优化这些正则表达式,我不确定是否有任何方法可以简化它。 任何建议将不胜感激。 非常感谢

【问题讨论】:

  • 优化这个正则表达式意味着把它分成几个更小的正则表达式。它们将更具可读性和可维护性。
  • @WiktorStribiżew 非常感谢如果您能在此处提供任何有用的链接,谢谢
  • 如果 正规表达式 工作正常,也许,问这个问题的更好地方是Code Review

标签: javascript ruby-on-rails ruby regex jquery-validate


【解决方案1】:

帮自己(以及将来使用该应用程序的任何人)一个忙,并将正则表达式拆分为 4:

{
  :lowercase => /regex_for_lowercase/,
  :uppercase => /regex_for_uppercase/,
  :digits => /regex_for_digits/,
  :symbols => /regex_for_symbols/,
}

然后计算密码匹配这 4 条规则中的多少条。如果输入的密码无效,它还会让您有机会显示更多有用的错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-08
    相关资源
    最近更新 更多