用于组合给定规则的正则表达式

时间:2016-08-01 11:34:15

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

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

密码长度必须至少为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,但我想优化这些正则表达式,我不确定是否有任何方法可以简化此操作。 任何建议将不胜感激。 非常感谢

1 个答案:

答案 0 :(得分:3)

自己(以及将来会在该应用上工作的任何人)帮忙,并将正则表达式分成4:

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

然后计算密码匹配的这4个规则中有多少个。如果输入的密码未验证,它还将使您有机会显示更多有用的错误消息。