You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助编写符合特定规则的密码验证正则表达式

密码验证逻辑修正与正则实现

需求回顾

需要实现的密码验证规则:

  • 长度在6-12字符之间
  • 至少包含1个数字
  • 仅允许英文字母、数字以及指定特殊字符:@!#$%^&*()-+_
  • 至少包含1个上述指定特殊字符
  • 不能包含空格
  • 不能出现连续3个相同的英文字母

原代码存在的问题

  1. 长度判断逻辑错误:password.length > 6 && password.length > 12 完全不符合“6-12字符”的要求,且提示文本存在拼写错误(charcters → characters)
  2. 数字校验正则错误:/(?=\S* [\d])/ 中多余的空格会导致校验失效
  3. 缺少非法字符拦截:未限制仅允许指定字符,空格、中文或其他特殊字符都能通过校验
  4. 缺失连续相同字母的校验:未实现“不能有连续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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:03:19