带有条件的Javascript正则表达式

时间:2012-12-31 08:37:00

标签: javascript regex

  

可能重复:
  Password validation regex

我需要使用以下政策在javascript中进行密码验证。请你告诉我正则表达式吗?我对正则表达式很新。

  • 密码长度应为8到18个字符,并且 密码应满足以下至少3个条件:
  • 密码应至少包含一个小写字母(a-z)
  • 密码应至少包含一个大写字母(a-z)
  • 密码至少应有一个数值(0-9)
  • 密码应具有特殊字符(即@。 - _#$%)

请帮我解决这个问题。我无法确定如何提供满足此要求的条件。

1 个答案:

答案 0 :(得分:2)

这个答案只是为了说明在一个正则表达式中做不可读的事情。请考虑其他更清洁的替代方案来编写代码。

它可以在1个正则表达式中完成,但它很可怕:

^(?:(?=.*[a-z])(?=.*\d)(?=.*[^a-zA-Z0-9\x00-\x1f])|(?=.*[a-z])(?=.*[A-Z])(?=.*\d)|(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z0-9\x00-\x1f])|(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9\x00-\x1f])).{8,18}$

它可以缩短一点,但仍然很难看:

^(?:(?=.*\d)(?=.*[^a-zA-Z0-9\x00-\x1f])(?:(?=.*[a-z])|(?=.*[A-Z]))|(?=.*[a-z])(?=.*[A-Z])(?:(?=.*\d)|(?=.*[^a-zA-Z0-9\x00-\x1f]))).{8,18}$

您在问题中提到了4个额外条件,这些条件对应于这些片段:

  • (?=.*\d):前瞻数字(0-9)
  • (?=.*[a-z]):预测小写英文字母(a-z)
  • (?=.*[A-Z]):预测大写英文字母(A-Z)
  • (?=.*[^a-zA-Z0-9\x00-\x1f]):预读除数字和英文字母之外的某些字符。控制字符也被排除在外。

据我所知,正则表达式中没有机制可以说匹配4个条件中的3个。因此,我必须列举所有这些条件,它占据了正则表达式的大部分。

.{8,18}只匹配任何角色的8-18。整个正则表达式都以^$为基础。