想要这个正则表达式工作最少8个字符。没有最大限制

时间:2016-07-28 06:56:15

标签: javascript regex

我的正则表达式:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])

它接受至少1个小写字母,1个大写字母,1个数字和1个特殊字符。

我希望这个最少8个字符。如果字符串长度小于8,则不匹配。

我已尝试(^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])){8,}这个。但它仍然接受小于8 Abc@123的长度。

2 个答案:

答案 0 :(得分:3)

您将限制量词附加到捕获组1(围绕整个模式),这意味着您要重复超前检查8次或更多次。

再添加一个前瞻:

/^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])/
  ^^^^^^^^^

请参阅regex demo

或者,您可以在最后添加.{8,}

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&]).{8,}/
                                               ^^^^^

请参阅this regex demo

除非您有其他意思,否则无需在字符类($ - > [$@$!%*?&])中重复[@$!%*?&]字符。

如果字符串由于其长度而不匹配,则开始变化的前瞻可能会更好。

console.log(/^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])/.test("1sD$"))
console.log(/^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])/.test("1sD$2sD$"))

答案 1 :(得分:0)

至少8个字符,至少1个字母和1个数字:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

至少8个字符,至少1个字母,1个数字和1个特殊字符:

"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$"

至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}"