Javascript 验证密码强度

在做表单提交的时候经常需要验证用户输入密码的强度,来进行相应的提示或者相应的交互效果。

前端验证密码无非就是用正则表达式来对输入字符就行匹配。

一般密码越复杂位数足够的话强度就越高。密码组成元素一般为:数字、特殊字符、大写字母、小写字母组成。

密码强度规则:

简单:6位(即便包含多种元素)
中等:至少7位(包含3种组成元素如:aB12345)
高等:至少8位(组成元素需全部包含如:aB12345!)

那么我就可以根据上面的组成元素制定相应的正则表达式,用匹配的结果来区分密码强度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function checkStrong(obj){
var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$""g");
var moderateRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z])(?=.*\\W))|((?=.*[A-Z])(?=.*[0-9])(?=.*\\W))|((?=.*[a-z])(?=.*[0-9]))(?=.*\\W)).*$""g"); 
var easyRegex = new RegExp("(?=.{6,}).*""g"); 
if (false == easyRegex.test(obj)) { 
//不适合
return 0;

else if (strongRegex.test(obj)) { 
//强
return 1;

else if (moderateRegex.test(obj)) { 
//中
return 2;

else { 
//弱
return 3;

}

调用上面的方法,传入密码参数,根据返回值来区分密码强弱程度。并可以根据值来做不同的交互效果,达到更好的用户体验。

1
2
3
4
5
6
switch(checkStrong("password")){
case 0 : break//不适合做密码
case 1 : break//密码强度很高
case 2 : break//密码强度中等
case 3 : break//密码强度很弱
}