本文详解如何使用 JavaScript 正则表达式验证密码强度,涵盖必须包含大写字母、小写字母、数字及特殊字符的要求。提供两种方案:一是强制包含全部四类字符且长度不小于12位;二是四选三组合且长度8至30位。通过具体代码示例解析正则逻辑,帮助开发者实现安全的密码校验功能。
JavaScript 密码强度验证概述
前言
本文记录在 JavaScript 中实现密码强度匹配的正则表达式方法。
正文
强制包含四类字符的正则方案
下方的正则表达式包含四种筛选条件,开发者可根据实际需求移除对应的括号内容:
- (?=.{12}) 表示密码长度必须大于或等于 12 位。
- (?=.*?[a-z]) 表示必须包含小写字母。
- (?=.*?[A-Z]) 表示必须包含大写字母。
- (?=.*?\d) 表示必须包含数字。
- (?=.*?[?!&¥$%^#,./@";:><[]}{-=+_\|》《。,、?’‘“”~ `]) 表示必须包含特殊字符。
const password = 'Cc1239999***'
const check = /^(?=.{12})(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)(?=.*?[*?!&¥$%^#,./@";:><\[\]}{\-=+_\\|》《。,、?'‘“”~ `]).*$/;
if (check.test(password)) {
console.log('ok')
} else {
console.log('false')
}
四选三组合验证策略
补充:另一种常见的密码强度验证策略是“四选三”,即密码必须同时包含数字、大写字母、小写字母和特殊字符中的至少三种。此类验证通常要求密码长度在 8 到 30 个字符之间。
对应的正则表达式如下:
^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{8,30}$
在 JavaScript 中的具体写法如下:
var regex = new RegExp('^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]{8,30}$');
if(!regex.test(pwd)){
msgError("输入错误:密码不符合规则,请重新输入。");
$("#password").focus();
return;
}
代码解析:
- [a-zA-Z0-9\W_!@#$%^&*`~()-+=]{8,30} 表示匹配由上述四类字符混合组成的字符串,长度限制在 8 到 30 位。
- \w 通常匹配字母、数字和下划线,但为了覆盖更多特殊字符,此处额外添加了 !@#$%^&*`~()-+= 等符号。
- 随后使用排除法,通过否定前瞻断言排除仅包含单一类型字符(如纯小写)或仅包含两种类型字符(如大小写混合)的情况,剩余即为满足“四选三”条件的密码。
- (?![a-zA-Z]+$) 用于排除仅由大小写字母组成的字符串,依此类推排除其他单一或双类组合,从而得到最终表达式。
到此这篇关于 JavaScript 正则验证密码强度(包含数字、特殊字符及英文字母大小写)的文章就介绍到这了,更多相关 JavaScript 正则验证密码强度内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!