如何在最小字符后检查密码强度?

时间:2012-06-08 16:28:44

标签: c# asp.net .net asp.net-mvc asp.net-ajax

我正在使用AjaxControlToolKit的PasswordStrength控件。一旦用户开始在控件中键入任何内容,它就会开始显示密码不足的消息。我希望这个消息只在输入了最小数量的字符后出现。我没有在控件上看到任何允许此功能的内容。关于我应该如何处理的任何建议?

2 个答案:

答案 0 :(得分:2)

附加到文本输入的客户端 change keyup事件。在那里,您可以在TextCssClass中添加/删除一个特殊的CSS类(如果您使用的是文本)只有一个规则:display: none(使用文本长度作为条件)。

答案 1 :(得分:1)

你可能需要为此推出自己的解决方案,如果你考虑它就有意义。通过隐藏两个字符的密码较弱但是显示三个字符的密码的视觉提示似乎暗示两个字符的密码就足够了。

据说可能能够做的就是编写类似于此的黑客攻击:

<script language="javascript">
  function onPasswordChange(textBox) {
      var passwordLabel = document.getElementById([labelID]);
      if(textBox.value.length < [constant]){
          passwordLabel.style.display = 'none';
      }
      else{
          passwordLabel.style.display = 'inline';            
      } 
  }
</script>

然后,您可以将此函数附加到控件更改 onKeyUp或onKeyDown事件,这样,如果密码字段的长度小于您希望的长度,它将隐藏包含该消息的标签力量没有得到满足。这是一个未经考验的唯一想法。你最终可能会遇到与这个脚本冲突的工具包javascript的问题,但很难说。

此外,labelID看起来是[controlIDName] _PasswordStrength。

编辑:

您可能希望将 onchange onKeyUp或onKeyDown事件添加到控件中,如此(代码隐藏):

control.Attributes.Add(“onchange”,“onPasswordChange(this)”);

 control.Attributes.Add("onKeyDown", "onPasswordChange(this)");

编辑2: 就黑客而言,这是非常混乱但它的工作原理。客户机侧:

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

<asp:TextBox ID="password" runat="server"></asp:TextBox>
<div id="PasswordStrengthContainer"></div>
<asp:PasswordStrength ID="PS" runat="server"
TargetControlID="password"  
DisplayPosition="RightSide"  
StrengthIndicatorType="Text"  
PreferredPasswordLength="10"  
PrefixText="Strength:"  
TextCssClass="TextIndicator_TextBox1"  
MinimumNumericCharacters="0"  
MinimumSymbolCharacters="0"  
RequiresUpperAndLowerCaseCharacters="false"  
TextStrengthDescriptions="Very Poor;Weak;Average;Strong;Excellent"  
TextStrengthDescriptionStyles="cssClass1;cssClass2;cssClass3;cssClass4;cssClass5"  
CalculationWeightings="50;15;15;20"
/>

 <script language="javascript">


function onPasswordChange(textBox) {
    var passwordLabel = document.getElementById("MainContent_password_PasswordStrength");
    var container = document.getElementById("PasswordStrengthContainer");

    if (passwordLabel != null) {
        document.getElementById("PasswordStrengthContainer").appendChild(
            document.getElementById("MainContent_password_PasswordStrength"));
    }

    if (textBox.value.length < 4) {
        container.style.display = 'none';
    }
    else {
        container.style.display = 'inline';
    }
}
 </script>

Serverside:

 password.Attributes.Add("onKeyDown", "onPasswordChange(this)");
 password.Attributes.Add("onBlur", "onPasswordChange(this)");

此代码效率不高,可以清理,但可用于演示目的。 javascript函数非常基本,但是你会注意到这一行:

 if (passwordLabel != null) {
        document.getElementById("PasswordStrengthContainer").appendChild(
            document.getElementById("MainContent_password_PasswordStrength"));
    }

不幸的是,工具包javascript函数将在您的函数之后触发,因此工具包会将显示设置为“无”。这段代码的作用是从页面中删除标签并将其放在div中,然后我们只将div的display属性设置为any,这将有效地隐藏标签。但是有一个奇怪的错误:当按下退格键删除字符时,div在某些情况下不会消失。我没有时间追查这个问题,但要清除它应该是微不足道的。

此外,我在Chrome中的onChange遇到了一些问题,因此选择onKeyDown而不是上面指出的@Adriano。