请问:为什么少于 6 位会报错,大于 18 位为什么不报啊?
{
pattern: /^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+){6,18}$/,
message: "密码不正确,密码由6-18位数字、英文或特殊字符组成!"
}
请问:为什么少于 6 位会报错,大于 18 位为什么不报啊?
{
pattern: /^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+){6,18}$/,
message: "密码不正确,密码由6-18位数字、英文或特殊字符组成!"
}
请把括号里面的所有+去掉, 不然你后面的{6,18}
匹配的括号里面组合重复6-18, 如'f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6'就不会通过:
/^(?:\d|[a-zA-Z]|[!@#$%^&*]){6,18}$/
+号属于正则当中的量词,表示重复一次或更多次,{n,m}也是量词,表示匹配n到m次;按照你的写法,分组里面就不是匹配一个字符,而是多个字符;就d+来说 可以匹配100个1,而后又重复6到18次,就成了100个1的6次到18次,同理其他带+号的地方也一样;所以{6,18}确实限制了最少位,而没限制最大是18位
试试下面的写法:
let reg = /^[\w!@#$%^&*]{6,12}$/
错误原因:
(\d+){6,18}相当于(\d{1,}){6,18}
所以(\d+){6,18}的意思是
数字至少出现1次的这种情况要出现6~18次才匹配,当6位数字以上时,“数字至少出现1次的这种情况”永远符合{6,18}