AS3的密码强度验证函数
- public static function evaluatePwd(sPW:String):int
- {
- if (sPW.length <= 4)
- return 0;
- var Modes:int = 0;
- for (var i:int = 0; i < sPW.length; i++)
- {
- Modes |= CharMode(sPW.charCodeAt(i));
- }
- return bitTotal(Modes);
- function CharMode(iN:int):int
- {
- if (iN>=48 && iN <=57)
- return 1;
- if (iN>=65 && iN <=90)
- return 2;
- if (iN>=97 && iN <=122)
- return 4;
- else
- return 8;
- }
- function bitTotal(num:int):*
- {
- var modes:int = 0;
- for (var i:int = 0; i < 4; i++)
- {
- if (num & 1) modes ++;
- num >>>= 1;
- }
- return modes;
- }
- }
另外还有一个十分简单的算法
- public static function evaluatePwd2(sPW:String):int
- {
- return sPW.replace(/^(?:([a-z])|([A-Z])|([0-9])|(.)){5,}|(.)+$/g, "$1$2$3$4$5").length;
- }
我们可以用多种图形化的界面甚至动画去展现密码的强度,举个简单的例子,例如我希望用户在输入密码后1秒内没有任何输入动作,则验证密码的强度,并且已进度条的形式展示
首先注册一个监听
- pwdInputView.password.addEventListener(KeyboardEvent.KEY_UP, onKey);
然后看看监听函数
- private var oldText:String;
- private function onKey(e:KeyboardEvent):void
- {
- if (oldText != pwdInputView.password.text && pwdInputView.password.text.length > 5)
- {
- oldText = pwdInputView.password.text;
- TweenLite.killTweensOf(updateStrengthView, false);
- TweenLite.delayedCall(1, updateStrengthView);
- }
- }
首先定义一个oldText成员,用于记录上次输入的密码,如果当前密码和上次密码不相同并且长度大于5,开始执行操作。我这里用了TweenLite作为计时器,1秒后将执行强度判断,如果发现用户在1秒内再次有输入操作,则销毁当前TweenLite。
再看看如何用视图来展示密码强度,这里不多作解释了,只是一个简单的动画效果。
- private function updateStrengthView():void
- {
- var toWidth:Number = pwdInputView.strengthCanvas.width * CheckStrong.evaluatePwd(pwdInputView.password.text) * .25;
- TweenLite.to(pwdInputView.maskCanvas, 1.5, {width:toWidth, ease:Bounce.easeOut, overwrite:false});
- }