我需要使用以下政策在javascript中进行密码验证。请你告诉我正则表达式吗?我对正则表达式很新。
请帮我解决这个问题。我无法确定如何提供满足此要求的条件。
答案 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。整个正则表达式都以^
和$
为基础。