带条件的Javascript正则表达式
可能重复:带条件的Javascript正则表达式,javascript,regex,Javascript,Regex,可能重复: 我需要使用以下策略在javascript中进行密码验证。你能告诉我这个的正则表达式吗?我对正则表达式很陌生 密码长度应为8到18个字符,并且 密码应至少满足以下3个条件: 密码应至少有一个小写字符(a-z) 密码应至少有一个大写字符(a-z) 密码应至少有一个数值(0-9) 密码应具有特殊字符(即@.-#$%) 请帮我解决这个问题。我无法确定如何提供满足此要求的条件。此答案只是为了说明在一个正则表达式中执行此操作是多么不可读。请考虑其他更清洁的选择来编写代码。>/P> 它可以在
我需要使用以下策略在javascript中进行密码验证。你能告诉我这个的正则表达式吗?我对正则表达式很陌生
- 密码长度应为8到18个字符,并且 密码应至少满足以下3个条件:
- 密码应至少有一个小写字符(a-z)
- 密码应至少有一个大写字符(a-z)
- 密码应至少有一个数值(0-9)
- 密码应具有特殊字符(即@.-#$%)
请帮我解决这个问题。我无法确定如何提供满足此要求的条件。此答案只是为了说明在一个正则表达式中执行此操作是多么不可读。请考虑其他更清洁的选择来编写代码。>/P> 它可以在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个额外条件,对应于这些片段:
:查找数字(0-9)(?=.*\d)
:向前看一看小写英文字母表(a-z)(?=.*[a-z])
:向前看一看大写英文字母表(A-Z)(?=.*[A-Z])
:查找数字和英文字母以外的字符。控制字符也被排除在外(?=.[^a-zA-Z0-9\x00-\x1f])
{8,18}
只需匹配任意字符的8-18即可。整个正则表达式都是用^
和$
锚定的。您尝试过任何方法并遇到了特定的问题吗?为什么你需要一个正则表达式呢?为什么你不一次检查一个正则表达式呢。应该足够简单。这里经常会问这个问题,它几乎是和的副本。这两个答案还表明,单个正则表达式并不真正适用于此。要求“密码应至少满足以下3个条件”使得无法仅使用一个正则表达式进行检查。使用4个带有计数器“多少失败”的regexp,如果计数器>2,则“密码错误”,感谢您的回复。在经历了几个线程之后,我明白了为什么不能用一个regexp来完成。所以我使用了4个regexp来实现它。