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

如何编写正则实现密码至少4种不同字符及基础规则校验

密码正则校验实现方案

待满足的校验规则

  • 密码仅允许由字母、数字构成
  • 密码总长度至少6位,且必须同时包含字母、数字两类内容
  • 密码中至少包含4种不同字符,支持纯字母或纯数字构成,但纯字母/纯数字场景下也需要满足至少4种不同字符的要求

原有正则的问题

你当前使用的正则如下:

/^\S(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$/i

该正则仅能覆盖「非空白字符开头、包含字母和数字、长度≥6、仅由字母数字构成」的校验,完全没有实现「至少4种不同字符」的校验逻辑。

实现方案

方案1:基础正则+简单逻辑判断(推荐,可维护性最高)

没有必要把所有校验逻辑都塞进单条正则里,拆分实现逻辑清晰,后续调整规则也更方便:

function checkPassword(password) {
  // 先校验基础规则:仅含字母数字、长度≥6、同时包含字母和数字
  const baseRulePass = /^[A-Za-z0-9]{6,}$/.test(password)
  const hasLetter = /[A-Za-z]/.test(password)
  const hasNumber = /\d/.test(password)
  if (!baseRulePass || !hasLetter || !hasNumber) return false
  // 校验不同字符数量≥4
  return new Set(password.split('')).size >= 4
}

方案2:纯正则实现(适配必须用单条正则完成校验的场景)

通过负向预查排除「最多只有3种不同字符」的情况,正则如下:

/^(?=.*[A-Za-z])(?=.*\d)(?!.*?(.)(?:.*?(?!\1)(.))?(?:.*?(?!\1)(?!\2)(.))?$)[A-Za-z0-9]{6,}$/

正则逻辑说明:

  • 末尾的[A-Za-z0-9]{6,}$负责匹配长度≥6、仅由字母数字构成的字符串
  • 两个正向预查(?=.*[A-Za-z])(?=.*\d)负责校验字符串同时包含字母、数字
  • 负向预查段负责拦截最多只有3种不同字符的情况:如果整个字符串遍历完最多只能捕获到3个互不重复的字符,就判定校验不通过,满足至少4种不同字符的要求。

内容的提问来源于stack exchange,提问作者zoltankerekes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:18:36