You need to enable JavaScript to run this app. jQuery密码强度检查器代码优化 寻求更简洁实现方案
优惠活动
大模型
产品
解决方案
定价
更多

jQuery密码强度检查器代码优化 寻求更简洁实现方案

原代码存在的可优化问题

  • 类名管理漏洞多:手动在每个switch分支里增减类名,不仅重复代码多,还存在明显遗漏——比如强度值为3(对应进度60)的分支完全没处理类名切换,会残留前序等级的类名;清空密码回到强度0的分支也没清除已添加的绿/黄类,最终导致颜色和实际强度不匹配的bug
  • 逻辑冗余:特殊字符校验拆成两个独立正则、字母数字判断的规则过严(要求至少两个连续字母数字)、长度判断规则重叠,没必要写多个分支做重复校验
  • 写法不统一:同一功能里混用原生DOM操作和jQuery方法,没有统一风格
  • CSS存在语法错误:原progress.strength::-webkit-progress-value规则中的background;没有赋值,会导致WebKit内核浏览器下的样式加载异常

精简实现思路

  • 用配置表维护所有强度等级对应的进度值、样式类,消除硬编码的switch分支
  • 统一类名切换逻辑:每次更新进度条前,批量清除所有强度相关的类名,再添加当前等级对应的类,从根源上避免漏删类的问题
  • 合并重复的正则判断,简化校验逻辑,去掉无意义的规则重叠
  • 统一用jQuery处理DOM操作,减少冗余代码
  • 给进度条加过渡动画,让颜色和进度变化更自然

优化后可直接运行的代码

<h1>密码强度检查</h1>
<label>输入密码</label>
<input style="width: 200px" type="password" autocomplete="none" id="password">
<progress id="strength" class="strength" value="0" max="100"></progress>
// 强度配置表,后续调整规则直接修改此处即可
const strengthConfig = [
  { level: 0, progress: 0, className: '' },
  { level: 1, progress: 20, className: 'red' },
  { level: 2, progress: 40, className: 'orange' },
  { level: 3, progress: 60, className: 'yellow' },
  { level: 4, progress: 80, className: 'light-green' },
  { level: 5, progress: 100, className: 'green' }
];
// 提取所有强度类名,用于批量清除
const allStrengthClasses = strengthConfig.map(item => item.className).filter(Boolean).join(' ');

// 绑定输入事件,同时支持键盘输入和粘贴触发
$('#password').on('keyup input', function() {
  checkPassword($(this).val());
});

function checkPassword(password) {
  let strength = 0;
  // 简化校验规则:
  // 同时包含字母+数字,加1分
  if (/[a-zA-Z]/.test(password) && /\d/.test(password)) strength += 1;
  // 包含任意特殊字符,加1分
  if (/[!@£$%^&*()~<>?]/.test(password)) strength += 1;
  // 长度大于6位,加1分
  if (password.length > 6) strength += 1;
  // 长度大于10位,加1分
  if (password.length > 10) strength += 1;
  // 防止计算出的强度超过配置的最大等级
  strength = Math.min(strength, strengthConfig.length - 1);

  // 批量更新进度条:清旧类、加新类、设进度值
  const current = strengthConfig[strength];
  $('#strength')
    .removeClass(allStrengthClasses)
    .addClass(current.className)
    .val(current.progress);
}
progress.strength {
  -webkit-appearance: none;
  appearance: none;
  width: 200px;
}
progress.strength::-webkit-progress-value {
  /* 给进度条变化加平滑过渡 */
  transition: all 0.3s ease;
}
progress.red::-webkit-progress-value {
  background: red;
}
progress.orange::-webkit-progress-value {
  background: rgb(255, 153, 0);
}
progress.yellow::-webkit-progress-value {
  background: rgb(229, 255, 0);
}
progress.light-green::-webkit-progress-value {
  background: rgb(150, 230, 50);
}
progress.green::-webkit-progress-value {
  background: rgb(53, 252, 13);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 05:36:03