请求协助编写符合特定规则的密码验证正则表达式
密码验证逻辑修正与正则实现
需求回顾
需要实现的密码验证规则:
- 长度在6-12字符之间
- 至少包含1个数字
- 仅允许英文字母、数字以及指定特殊字符:
@!#$%^&*()-+_ - 至少包含1个上述指定特殊字符
- 不能包含空格
- 不能出现连续3个相同的英文字母
原代码存在的问题
- 长度判断逻辑错误:
password.length > 6 && password.length > 12完全不符合“6-12字符”的要求,且提示文本存在拼写错误(charcters→characters) - 数字校验正则错误:
/(?=\S* [\d])/中多余的空格会导致校验失效 - 缺少非法字符拦截:未限制仅允许指定字符,空格、中文或其他特殊字符都能通过校验
- 缺失连续相同字母的校验:未实现“不能有连续3个相同字母”的规则
修正后的完整代码
function passwordValidated() { var password = document.getElementById("password").value; var passMsg = document.getElementById("passMsg"); // 校验长度:6-12字符 if (password.length < 6 || password.length > 12) { passMsg.innerHTML = "密码长度必须在6到12个字符之间"; return false; } // 校验是否存在连续3个相同英文字母 if (/([a-zA-Z])\1\1/.test(password)) { passMsg.innerHTML = "密码不能包含连续3个相同的英文字母"; return false; } // 校验仅允许指定字符(自动拦截空格) if (!/^[a-zA-Z\d@!#$%^&*()-+_]+$/.test(password)) { passMsg.innerHTML = "密码仅允许包含英文字母、数字以及@!#$%^&*()-+_这些特殊字符"; return false; } // 校验至少包含1个数字 if (!/\d/.test(password)) { passMsg.innerHTML = "密码必须包含至少1个数字"; return false; } // 校验至少包含1个指定特殊字符 if (!/[@!#$%^&*()-+_]/.test(password)) { passMsg.innerHTML = "密码必须包含至少1个指定的特殊字符(@!#$%^&*()-+_)"; return false; } passMsg.innerHTML = ""; return true; }
关键正则说明
^[a-zA-Z\d@!#$%^&*()-+_]+$:限定密码仅由允许的字符组成,^和$确保整个字符串都符合规则,自动排除空格([a-zA-Z])\1\1:捕获单个英文字母,匹配连续三次出现的相同字母\d:匹配任意数字,用于校验至少一个数字的存在
内容的提问来源于stack exchange,提问作者eyal cohen
相关产品推荐
相关产品推荐

