在正则表达式(?=^.{6,10}$)(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{":\'?>.<,])(?!.*\\s).*$')
中,为什么aA1!111]
通过?在特殊字符(?=.*[!@#$%^&*()_+}{":\'?>.<,])
的规则组中,我没有逃脱过方括号,因此我认为应该接受它们之间的任何内容,但不接受方括号本身
答案 0 :(得分:2)
您正在误解/误解了积极的前瞻实际上是做什么的。正则表达式中的正向先行要求必须存在某些字符,但它们并不能断定不能存在哪些字符。这是您的正则表达式的略微修改版本:
^
(?=.*\\d) -- has a number
(?=.*[a-z]) -- has lowercase
(?=.*[A-Z]) -- has uppercase
(?=.*[!@#$%^&*()_+}{":\'?>.<,]) -- has a symbol
(?!.*\\s) -- has no whitespace
.{6,10} -- between 6 and 10 characters
$
如果您想将样式限制为不允许不允许使用方括号和其他字符,则可以修改(?!.*\s)
否定超前术语,例如
(?!.*[\s\]\[])
出于可读性考虑,我在这里仅转义一次,但是您的正则表达式语言可能需要两次转义。
答案 1 :(得分:0)
为使方括号不被接受为输入,请将其包含在以下字符类别中:(?=.*[!@#$%^&*()_+}{":\'?>.<,])