我的正则表达式:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])
它接受至少1个小写字母,1个大写字母,1个数字和1个特殊字符。
我希望这个最少8个字符。如果字符串长度小于8,则不匹配。
我已尝试(^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])){8,}
这个。但它仍然接受小于8 Abc@123
的长度。
答案 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,}"