const regex = /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[\W])(?=.*[\S])^[0-9A-Za-z\S]{6,12}$/g;
const password = `A123@abc`;
console.log(regex.test(password))
表达式解释:
在正则表达式中,\W
是一个特殊字符类,用于匹配任意非单词字符(非字母、非数字、非下划线)。
具体来说,\W
表示匹配以下字符之一:
- 除了字母(A-Z 和 a-z)
- 除了数字(0-9)
- 除了下划线(_)
换句话说,\W
匹配任何非单词字符。这个不包含下划线的,ZhangSan_01 校验会不通过。
表达式中这个6-12表示字符串长度,是可以修改成需要的位数。
^[0-9A-Za-z\S] 这个表达式是一个正则表达式,用于匹配一个字符的模式。在这个表达式中,它表示匹配一个字符,该字符可以是数字(0-9)、大写字母(A-Z)、小写字母(a-z)或者非空白字符(\S)。
更详细地解释该表达式的含义:
- ^ 表示匹配字符串的开头。
- [0-9A-Za-z\S] 表示一个字符集,匹配包含数字、大写字母、小写字母和非空白字符的任意一个字符。
- 0-9 表示数字范围 0 到 9。
- A-Z 表示大写字母范围 A 到 Z。
- a-z 表示小写字母范围 a 到 z。
- \S 表示任意非空白字符。
因此,该表达式的意思是匹配一个字符,该字符既可以是数字、大写字母、小写字母,也可以是任意非空白字符。
优化后的表达式,少了 ^[0-9A-Za-z\S] 部分,[\W]
更改为[\W_]
下面这个正则也适用密码强度校验
const regex = /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[\W_])(?=.*[\S]).{8,32}$/;
const password = 'ZhangSan_01';
console.log(regex.test(password));//输出 true
这个正则表达式要求密码满足以下条件:
- 至少包含一个数字
(?=.*[0-9])
。 - 至少包含一个大写字母
(?=.*[A-Z])
。 - 至少包含一个小写字母
(?=.*[a-z])
。 - 至少包含一个特殊字符或下划线
(?=.*[\W_])
。 - 至少包含一个非空格字符
(?=.*[\S])
。 - 密码长度为8到32个字符
{8,32}
。