正则表达式:在表达式开头不识别非单词

时间:2016-06-16 12:36:47

标签: regex expression

我正在使用标准的正则表达式作为密码检查,据我所知,在表达式的开头应该接受非单词字符(\ W),但不是。正则表达式的设计要求至少8个字符,以及至少1个低位,1个高位,1个数字和1个非单词字符的组合。

有谁知道我做错了什么?

\b(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d])(?=.*[\W])\b.*

E.g。

T3st1ng!
确定

!T3sting

不是。

2 个答案:

答案 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).*