checkStrength.js
3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/**
* 密码强度验证
* by yangyonghong
*
*/
define( 'checkStrength', function( require, exports ) {
var checkStrength = function( target, options ) {
this.target = target;
this.opt = {
minLength: 6, //最小长度
showClolor:['#ccc','#ff6548','#ff8c00','#5dbc63'],//颜色展示
strengthText:['','弱','中','强'],//文字展示
showText:false,//是否显示文字
showArea:'.show-menu' //颜色展示位置
};
$.extend( this.opt, options );
this.init();
};
checkStrength.prototype = {
init:function(){
var _this = this ,
_target = $( this.target );
//绑定事件
_target.bind( 'click , keyup , blur',function(){
_this.creatColorbar();
var _level = _this.checkStrong();console.log(_level)
switch( _level ){
case 0:
$( '#s-colorbar1,#s-colorbar2,#s-colorbar3' ).css({ 'background' : _this.opt.showClolor[0]});
break;
case 1:
$( '#s-colorbar1' ).css({ 'background' : _this.opt.showClolor[1]})
.siblings().css({ 'background' : _this.opt.showClolor[0]});
break;
case 2:
$( '#s-colorbar1,#s-colorbar2' ).css({ 'background' : _this.opt.showClolor[2]});
$( '#s-colorbar3' ).css({ 'background' : _this.opt.showClolor[0]});
break;
case 3:
$( '#s-colorbar1,#s-colorbar2,#s-colorbar3' ).css({ 'background' : _this.opt.showClolor[3]});
break;
default:
$( '#s-colorbar1,#s-colorbar2,#s-colorbar3' ).css({ 'background' : _this.opt.showClolor[3]});
break;
}
if( _this.opt.showText ){
//$( '.s-strength' ).html( _this.opt.strengthText[_level] );
for( var i = 1 ; i <= $( '.s-colorbar' ).find( 'span' ).length ; i ++ ){
$( '#s-colorbar' + i ).html( _this.opt.strengthText[ i ] );
}
}
});
},
//创建颜色展示区域
creatColorbar:function(){
var _this = this ,
_target = $( this.target );
// if( _this.opt.showText && _target.siblings( '.s-strength' ).length < 1 ){
// var _strength = $( '<div class="s-strength"></div>' );
// _strength.insertAfter( _target );
// }
if( $( _this.opt.showArea ).find( '.s-colorbar' ).length < 1 ){
var _colorbar = $( '<div class="s-colorbar">\
<span id="s-colorbar1"></span>\
<span id="s-colorbar2"></span>\
<span id="s-colorbar3"></span></div>' );
_colorbar.appendTo( $( _this.opt.showArea ) );
}
},
//返回密码的强度级别
checkStrong:function(){
var _this = this,
_target = $( this.target ),
_val = _target.val(),
lv = 0;
if( _val.length < _this.opt.minLength ){//最小长度
return 0;
//lv = 0;
}
Modes = 0;
for ( i=0; i<_val.length; i++ ){
//测试每一个字符的类别并统计一共有多少种模式.
Modes|= _this.charMode( _val.charCodeAt(i) );
}
return _this.bitTotal(Modes);
// 正则验证
// if( _val.match(/[a-z]/g) ){
// lv++;
// }
// if( _val.match(/[0-9]/g) ){
// lv++;
// }
// if( _val.match(/(.[^a-z0-9])/g) ){
// lv++;
// }
// return lv;
},
//测试某个字符是属于哪一类.
charMode:function( iN ){
if ( iN>=48 && iN <=57 ){ //数字
return 1;
}
if ( iN>=65 && iN <=90 ){ //大写字母
return 2;
}
if ( iN>=97 && iN <=122 ) { //小写
return 4;
}
else { //特殊字符
return 8;
}
},
//计算出当前密码当中一共有多少种模式
bitTotal:function( num ){
modes=0;
for ( i = 0; i < 4; i++ ){
if ( num & 1 ){
modes++;
}
num >>>=1;
}
return modes;
}
};
return checkStrength;
});