使用ASP.NET Atlas开发检测密码强度的自定义Behavior

本文介绍了一种利用Atlas Behavior在客户端进行密码强度检测的方法。通过封装特定行为,实现在用户输入密码时即时反馈强度等级。文章详细展示了如何创建并应用这一自定义Behavior。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:Dflying Chen (http://dflying.cnblogs.com/

本文源于维生素C.net的一篇文章利用数学方法来大大降低一个逻辑判断实现的难度的例子。检测代码来自THIN检验密码强度的JS类

Atlas中提供了客户端JavaScript强大的面向对象功能,这几天看到了上述二位的帖子,觉得这个功能需求在日常开发中还是很常见的。晚上闲来无事,将上述功能封装为Atlas中的Behavior,以方便重用。关于Atlas的Behavior,请参考:在ASP.NET Atlas中创建自定义的Behavior

按照在ASP.NET Atlas中创建自定义的Behavior这篇文章的五个自定义步骤,很容易写出了这个Behavior。其中最重要的部分为检验密码强度的算法,这里我偷了个懒,只是简单的将THIN的代码完全Copy过来(兄弟不要骂我-_-b),有心的朋友可以将它重构成更“Atlas”的样子。这个检测函数将在每次用户在相应的input中按键时被触发:

以下引自THIN的评论,关于如何定制Password Strength,当然,您也可以将其抽出来成为该Behavior的属性:

var PasswordStrength ={
Level : ["高,实在是高","还行啦","靠,这样也行"],
LevelValue : [30,20,0],//强度值
Factor : [1,2,5],//字符加数,分别为字母,数字,其它
KindFactor : [0,0,10,20],//密码含几种组成的加数
Regex : [/[a-zA-Z]/g,/\d/g,/[^a-zA-Z0-9]/g] //字符正则数字正则其它正则
}

这个部分可改成可以定制的,Level和LevelValue要求统一,如Level改成["高,实在是高","还行啦","太简单了,小心为妙 ","靠,这样也行"]那么LevelValue就应改成LevelValue : [40,30,20,0]//这个强度值我是随便写的,可以多测几个实例找出真正合适的数字。

ExpandedBlockStart.gif ContractedBlock.gif function  keyPressHandler()  dot.gif {
InBlock.gif
InBlock.gif    
// you may refactor this part to make the code more 'Atlas like' :-)
ExpandedSubBlockStart.gifContractedSubBlock.gif
    var PasswordStrength =dot.gif{
InBlock.gif        Level : [
"高,实在是高","还行啦","靠,这样也行"],
InBlock.gif        LevelValue : [
30,20,0],//强度值
InBlock.gif
        Factor : [1,2,5],//字符加数,分别为字母,数字,其它
InBlock.gif
        KindFactor : [0,0,10,20],//密码含几种组成的加数 
InBlock.gif
        Regex : [/[a-zA-Z]/g,/\d/g,/[^a-zA-Z0-9]/g] //字符正则数字正则其它正则
ExpandedSubBlockEnd.gif
        }

InBlock.gif    PasswordStrength.StrengthValue 
= function(pwd)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
var strengthValue = 0;
InBlock.gif        
var ComposedKind = 0;
InBlock.gif        
for(var i = 0 ; i < this.Regex.length;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
var chars = pwd.match(this.Regex[i]);
InBlock.gif            
if(chars != null)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                strengthValue 
+= chars.length * this.Factor[i];
InBlock.gif                ComposedKind 
++;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif        strengthValue 
+= this.KindFactor[ComposedKind];
InBlock.gif        
return strengthValue;
ExpandedSubBlockEnd.gif    }
 
InBlock.gif    PasswordStrength.StrengthLevel 
= function(pwd)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
var value = this.StrengthValue(pwd);
InBlock.gif        
for(var i = 0 ; i < this.LevelValue.length ; i ++)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if(value >= this.LevelValue[i] )
InBlock.gif                
return this.Level[i];
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif    
// end of the refactoring section
InBlock.gif
    
InBlock.gif    $(_checkResultLabelID).innerHTML 
= PasswordStrength.StrengthLevel(this.control.element.value);
ExpandedBlockEnd.gif}

同时在这个Behavior中添加了属性checkResultLabelID,用来指定显示检验结果的Label:

None.gif var  _checkResultLabelID;
ExpandedBlockStart.gifContractedBlock.gif
this .get_checkResultLabelID  =   function ()  dot.gif {
InBlock.gif    
return _checkResultLabelID;
ExpandedBlockEnd.gif}

ExpandedBlockStart.gifContractedBlock.gif
this .set_checkResultLabelID  =   function (value)  dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
if (_checkResultLabelID != value) dot.gif{
InBlock.gif        _checkResultLabelID 
= value;
InBlock.gif        
this.raisePropertyChanged('checkResultLabelID');
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

您也可以很方便的添加一些更花哨的功能,例如对于不同强度的输入,提示文字的背景颜色有所改变等。完整的源代码请参考本文后面的下载。

测试的步骤也很简单,首先在ScriptManager中添加这个Behavior的引用:

None.gif < atlas:ScriptManager  runat ="server"  ID ="ScriptManager1" >
None.gif    
< Scripts >
None.gif        
< atlas:ScriptReference  Path ="PasswordStrengthCheckBehavior.js"   />
None.gif    
</ Scripts >
None.gif
</ atlas:ScriptManager >

然后在页面上添加一个input,用来输入密码(演示程序中没有设定type为password),和一个span,用来显示检验结果:

None.gif < div >
None.gif    Input a password:
None.gif    
< input  id ="password"  type ="text"   />
None.gif    
< span  id ="result" ></ span >
None.gif
</ div >

最后,Atlas Script中将上面的input提升为Atlas控件,并加入我们刚刚写好的Behavior:

None.gif < script  type ="text/xml-script" >
None.gif    
< page  xmlns:script ="http://schemas.microsoft.com/xml-script/2005" >
None.gif        
< components >
None.gif            
< textBox  id ="password" >
None.gif                
< behaviors >
None.gif                    
< passwordStrengthCheckBehavior  checkResultLabelID ="result"   />
None.gif                
</ behaviors >
None.gif            
</ textBox >
None.gif        
</ components >
None.gif    
</ page >
None.gif
</ script >

就是这么简单,浏览器中如下:

简单密码:
pwdcheck1.JPG

中等密码:
pwdcheck2.JPG

复杂密码:
pwdcheck3.JPG

源代码以及示例程序可以在此下载:http://files.cnblogs.com/dflying/PasswordStrengthCheckBehaviorDemo.zip

转载于:https://www.cnblogs.com/dflying/archive/2006/05/16/Check_Password_Strength_using_Custom_Atlas_Behavior.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值