开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1588|回复: 1
收起左侧

[js/PHP求助] 用JavaScript评估用户输入密码的强度

[复制链接]

发表于 2013-2-20 23:23:41 | 显示全部楼层 |阅读模式   广东省广州市
原有代码请查看:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
  •     <title></title>
    </head>
  • <body>
        <script type="text/javascript">
  •         //CharMode函数   
    function CharMode(iN) {  
  •             if (iN >=48&& iN <=57) //数字  
    return1;  
  •             if (iN >=65&& iN <=90) //大写字母  
    return2;  
  •             if (iN >=97&& iN <=122) //小写  
    return4;  
  •             else  
                    return8; //特殊字符   
  •         }  
  •         //bitTotal函数   
    function bitTotal(num) {  
  •             modes =0;  
                for (i =0; i <4; i++) {  
  •                 if (num &1) modes++;  
                    num >>>=1;  
  •             }  
                return modes;  
  •         }  
  •         //checkStrong函数   
    function checkStrong(sPW) {  
  •             if (sPW.length <=4)  
                    return0; //密码太短  
  •             Modes =0;  
                for (i =0; i < sPW.length; i++) {  
  •                 Modes |= CharMode(sPW.charCodeAt(i));  
                }  
  •             return bitTotal(Modes);  
            }  

  •         //pwStrength函数   
    function pwStrength(pwd) {  
  •             O_color ="#eeeeee";  
                L_color ="#FF0000";  
  •             M_color ="#FF9900";  
                H_color ="#33CC00";  
  •             if (pwd ==null|| pwd =='') {  
                    Lcolor = Mcolor = Hcolor = O_color;  
  •             } else {  
                    S_level = checkStrong(pwd);  
  •                 switch (S_level) {  
                        case0:  
  •                         Lcolor = Mcolor = Hcolor = O_color;  
                        case1:  
  •                         Lcolor = L_color;  
                            Mcolor = Hcolor = O_color;  
  •                         break;  
                        case2:  
  •                         Lcolor = Mcolor = M_color;  
                            Hcolor = O_color;  
  •                         break;  
                        default:  
  •                         Lcolor = Mcolor = Hcolor = H_color;  
                    }  

  •                 document.getElementById("strength_L").style.background = Lcolor;  
  •                 document.getElementById("strength_M").style.background = Mcolor;  
                    document.getElementById("strength_H").style.background = Hcolor;  
  •                 return;  
                }  
  •         } </script>
        <form name="form1" action="">
  •     输入密码:<input type="password" size="10" onkeyup="pwStrength(this.value)" onblur="pwStrength(this.value)">
        <br>
  •     密码强度:  
        <table width="217" border="1" cellspacing="0" cellpadding="1" bordercolor="#cccccc"
  •         height="23" style='display: inline'>
            <tr align="center" bgcolor="#eeeeee">
  •             <td width="33%" id="strength_L">
                    弱  
  •             </td>
                <td width="33%" id="strength_M">
  •                 中  
                </td>
  •             <td width="33%" id="strength_H">
                    强  
  •             </td>
            </tr>
  •     </table>
        </form>
  • </body>
  • </html>
首先我们来改善一下上面博友的验证函数为如下代码:

    var PagePage = Page || {};  
  • PagePage.Utility = Page.Utility || {};  
    PagePage.Utility.Registration = Page.Utility.Registration || {};  

  • //获取密码强度  
  • Page.Utility.Registration.getPasswordLevel = function (password) {  
        if (password == null || password == '')  
  •         return 0;  
  •     if (password.length <= 4)  
            return 0; //密码太短  

  •     var Modes = 0;  
  •     for (i = 0; i < password.length; i++) {  
            Modes |= CharMode(password.charCodeAt(i));  
  •     }  
        return bitTotal(Modes);  

  •     //CharMode函数   
  •     function CharMode(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 bitTotal(num) {  
            modes = 0;  
  •         for (i = 0; i < 4; i++) {  
                if (num & 1) modes++;  
  •             num >>>= 1;  
            }  
  •         return modes;  
        }  
  • };
然后来创建View Model,但是引用Knockout之前,我们首先要引用Knockout的Js类库(具体介绍请查看Knockout应用开发指南的系列教程)
View model代码如下:

    var viewModel = {  
  •     Password: ko.observable(""),  
        Ocolor: "#eeeeee"  
  • };
对于密码强度以及颜色的值依赖于密码字符串的值,所以我们需要为他们声明依赖属性,代码如下:

    viewModel.PasswordLevel = ko.dependentObservable(function () {  
  •     return Page.Utility.Registration.getPasswordLevel(this.Password());  
    }, viewModel);  

  • viewModel.Lcolor = ko.dependentObservable(function () {  
  •     //根据密码强度判断第一个格显示的背景色  
        return this.PasswordLevel() == 0 ? this.Ocolor : (this.PasswordLevel() == 1 ? "#FF0000" : (this.PasswordLevel() == 2 ? "#FF9900" : "#33CC00"))  
  • }, viewModel);  
  • viewModel.Mcolor = ko.dependentObservable(function () {  
        //根据密码强度判断第二个格显示的背景色  
  •     return this.PasswordLevel() < 2 ? this.Ocolor : (this.PasswordLevel() == 2 ? "#FF9900" : "#33CC00")  
    }, viewModel);  

  • viewModel.Hcolor = ko.dependentObservable(function () {  
  •     //根据密码强度判断第三个格显示的背景色  
        return this.PasswordLevel() < 3 ? this.Ocolor : "#33CC00"  
  • }, viewModel);
然后使用applyBindings方法将view model绑定到该页面,你可以使用jQuery的ready函数来执行该绑定代码,也可以在页面最下方执行绑定代码,我们这里使用了jQuery,代码如下:

    $((function () {  
  •     ko.applyBindings(viewModel);  
  • }));
最后,我们再看看这些值怎么动态绑定到HTML元素上的,请查看如下代码(其中使用了afterkeydown代替了onKeyUp和onBlur):

    <form name="form1" action="">
  • 输入密码:  
    <input type="text" size="10" data-bind="value:Password, valueUpdate: 'afterkeydown'">
  • <br>
    密码强度:  
  • <table width="217" border="1" cellspacing="0" cellpadding="1" bordercolor="#cccccc"
        height="23" style='display: inline'>
  •     <tr align="center" bgcolor="#eeeeee">
            <td width="50"data-bind="style: { backgroundColor: Lcolor }">弱</td>
  •         <td width="50"data-bind="style: { backgroundColor: Mcolor }">中</td>
            <td width="50"data-bind="style: { backgroundColor: Hcolor }">强</td>
  •     </tr>
    </table>
  • </form>
然后就OK,运行代码查看,一模一样的功能展示出来了。
如果去掉为验证而改善的代码,总代码肯定是比原有的方式少的。

完整版代码如下:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • <html>
    <head>
  •     <script type="text/javascript" src="http://knockoutjs.com/js/jquery-1.4.2.min.js"></script>
        <script type="text/javascript" src="http://knockoutjs.com/js/jquery.tmpl.js"></script>
  •     <script type="text/javascript" src="http://knockoutjs.com/js/knockout-1.2.1.js"></script>
    </head>
  • <body>
        <script type="text/javascript">
  •         var PagePage = Page || {};  
            PagePage.Utility = Page.Utility || {};  
  •         PagePage.Utility.Registration = Page.Utility.Registration || {};  
  •         //获取密码强度  
            Page.Utility.Registration.getPasswordLevel =function (password) {  
  •             if (password ==null|| password =='')  
                    return0;  

  •             if (password.length <=4)  
  •                 return0; //密码太短  
  •             var Modes =0;  
                for (i =0; i < password.length; i++) {  
  •                 Modes |= CharMode(password.charCodeAt(i));  
                }  
  •             return bitTotal(Modes);  
  •             //CharMode函数   
    function CharMode(iN) {  
  •                 if (iN >=48&& iN <=57) //数字  
    return1;  
  •                 if (iN >=65&& iN <=90) //大写字母  
    return2;  
  •                 if (iN >=97&& iN <=122) //小写  
    return4;  
  •                 else  
                        return8; //特殊字符   
  •             }  
  •             //bitTotal函数  
    function bitTotal(num) {  
  •                 modes =0;  
                    for (i =0; i <4; i++) {  
  •                     if (num &1) modes++;  
                        num >>>=1;  
  •                 }  
                    return modes;  
  •             }  
            };  

  •         var viewModel = {  
  •             Password: ko.observable(""),  
                Ocolor: "#eeeeee"  
  •         };  
  •         viewModel.PasswordLevel = ko.dependentObservable(function () {  
                return Page.Utility.Registration.getPasswordLevel(this.Password());  
  •         }, viewModel);  
  •         viewModel.Lcolor = ko.dependentObservable(function () {  
                //根据密码强度判断第一个格显示的背景色  
  • returnthis.PasswordLevel() ==0?this.Ocolor : (this.PasswordLevel() ==1?"#FF0000" : (this.PasswordLevel() ==2?"#FF9900" : "#33CC00"))  
            }, viewModel);  

  •         viewModel.Mcolor = ko.dependentObservable(function () {  
  •             //根据密码强度判断第二个格显示的背景色  
    returnthis.PasswordLevel() <2?this.Ocolor : (this.PasswordLevel() ==2?"#FF9900" : "#33CC00")  
  •         }, viewModel);  
  •         viewModel.Hcolor = ko.dependentObservable(function () {  
                //根据密码强度判断第二个格显示的背景色  
  • returnthis.PasswordLevel() <3?this.Ocolor : "#33CC00"  
            }, viewModel);  

  •         $((function () {  
  •             ko.applyBindings(viewModel);  
            }));  

  •          
  •     </script>
        <form name="form1" action="">
  •     输入密码:<input type="text" size="10" data-bind="value:Password, valueUpdate: 'afterkeydown'">
        <br>
  •     密码强度:  
        <table width="217" border="1" cellspacing="0" cellpadding="1" bordercolor="#cccccc"
  •         height="23" style='display: inline'>
            <tr align="center" bgcolor="#eeeeee">
  •             <td width="50" id="strength_L" data-bind="style: { backgroundColor: Lcolor }">
                    弱  
  •             </td>
                <td width="50" id="strength_M" data-bind="style: { backgroundColor: Mcolor }">
  •                 中  
                </td>
  •             <td width="50" id="strength_H" data-bind="style: { backgroundColor: Hcolor }">
                    强  
  •             </td>
            </tr>
  •     </table>
        </form>
  • </body>
  • </html>
结帖率:60% (3/5)
发表于 2013-2-20 23:29:16 | 显示全部楼层   广东省珠海市
沙发= =
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表