我的正则表达式: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])
它接受至少1个小写字母,1个大写字母,1个数字和1个特殊字符。
我希望此代码至少可以使用8个字符。如果字符串长度小于8,则不应匹配。
我已经试过(^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])){8,}
了。但是它仍然接受小于8的长度Abc@123
。
您已将限制量词附加到捕获组1(围绕整个模式),这意味着您要重复8次或多次前瞻检查。
再添加一个前瞻:
/^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])/
^^^^^^^^^
请参阅regex演示。
或者,您可以.{8,}
在末尾添加
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&]).{8,}/
^^^^^
请参阅此正则表达式演示。
除非您另有说明,否则无需$
在字符类([$@$!%*?&]
-> [@$!%*?&]
)中重复该字符。
如果字符串的长度不匹配,则开始变体的前瞻性可能会更好。
console.log(/^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])/.test("1sD$"))
console.log(/^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])/.test("1sD$2sD$"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句