我正在使用标准的正则表达式作为密码检查,据我所知,在表达式的开头应该接受非单词字符(\ W),但不是。正则表达式的设计要求至少8个字符,以及至少1个低位,1个高位,1个数字和1个非单词字符的组合。
有谁知道我做错了什么?
\b(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d])(?=.*[\W])\b.*
E.g。
T3st1ng!
确定
!T3sting
不是。
答案 0 :(得分:2)
您需要使用
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W).{8,}$
请参阅regex demo
而不是\b
您需要^
和$
个锚点。此外,您不必设置超前长度检查,可以将其移动到最后的.
部分。此外,不需要在字符类中使用单个简写类,将[\d]
替换为\d
以获得更清晰的表达式。
答案 1 :(得分:0)
单词边界\b
是非单词字符和单词字符之间的虚拟空格。
单词字符都是字母数字字符。 !
是一个非单词字符,因此您的!T3sting无法正常工作。
如果您只是在检查密码,那么您并不需要这样做。
正确的是:
(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W).*