要求:长度为8到32位的字符串,必须包含如下四种字符中的三种组合:小写字母、大写字母、数字、特殊字符包括 `~!@#$%^&*()-_=+|[{}]:'",<.>/?
我写的好像有问题
/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_`~!@#$%^&*()-_=+\\/|[{}\]/:'",<.>/?]+$)(?![a-z0-9]+$)(?![a-z\W_`~!@#$%^&*()-_=+\\/|[{}\]/:'",<.>/?]+$)(?![0-9\W_`~!@#$%^&*()-_=+\\/|[{}\]/:'",<.>/?]+$)[a-zA-Z0-9\W_`~!@#$%^&*()-_=+\\/|[{}\]/:'",<.>/?]{8,32}$/
求大佬指点一下
有个需要注意的地方是
-
在[]
中用于指定范围,匹配-
字符本身需要转义或放在开头)
ascii 码是 41,_
ascii 码是 95,因此[)-_]
将匹配 ascii 码 41 到 95 所有字符,其中包含数字(48~57)和大写字母(65~90)修复方法是
-
前加\
进行转义或者放在开头
对一下 ascii 码表发现特殊字符是除了控制符、数字、大小写字母、空格、
;
、\
以外的 ascii 字符(看你下面的正则里又多了\
,还写了三遍/
两遍_
,不知道是不是写错,这里暂时以上面`~!@#$%^&*()-_=+|[{}]:'",<.>/?
为准),因此也可以这样写如果不限制只使用一个正则,则建议正则仅用于简单有把握的匹配,像限制至少三种字符这种还是另外判断好