代码之家  ›  专栏  ›  技术社区  ›  Russ Cam

更改密码控件并为新密码设置正则表达式

  •  1
  • Russ Cam  · 技术社区  · 16 年前

    这似乎应该有一个简单的解决方案,但我似乎找不到。

    我在用电话 ChangePassword 控件在ASP.NET 2.0应用程序中,使用 ChangePasswordTemplate SuccessTemplate 定义自定义样式。文本框的ID如下所示

    当前密码文本框ID= 当前密码
    新密码
    确认新密码文本框ID=

    DRY 出于各种原因,我希望使用自定义成员资格提供程序中定义的正则表达式来验证新密码客户端。不幸的是,设置 ChangedPassword 控件的属性,如下所示

    ChangePassword.NewPasswordRegularExpression = 
        Membership.PasswordStrengthRegularExpression;
    ChangePassword.NewPasswordRegularExpressionErrorMessage = 
        "Regex Error Message";
    

    Page_Init 将表达式设置为预期值,但不会导致对新密码(页面发回和标准成员身份)进行客户端验证 显示失败文本)。

    我需要一个 RegularExpressionValidator 设定 ValidationExpression 财产 Membership.PasswordStrengthRegularExpression 但我能看到的最好的方法是通过递归模板中的控件来找到 正则表达式验证器 设置属性,这让我相信一定有更优雅的方式。我在模板中有其他验证器控件(必填字段和比较验证器),以防这可能导致与使用 验证属性。

    那么,我的问题是 控件 控制的 NewPasswordRegularExpression 正则表达式验证器

    控件 NewPasswordRegularExpression 属性不验证客户端。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Andy West    16 年前

    如果使用“转换为模板”,则RegularExpressionValidator控件不会自动创建,因此不会呈现到最终页面。这可以通过在转换为模板之前和之后查看页面源来确认。

    要添加RegularExpressionValidator,就像ASP.NET在没有模板的情况下使用的一样,请在NewPassword文本框和RequiredFieldValidator之间定义它,如下所示:

    <asp:TextBox ID="NewPassword" runat="server" TextMode="Password"></asp:TextBox>
    
    <asp:RegularExpressionValidator ID="NewPasswordRegExp" runat="server"
        ErrorMessage="RegularExpressionValidator" Display="Dynamic"
        ControlToValidate="NewPassword" ValidationGroup="ChangePassword1"></asp:RegularExpressionValidator>
    
    <asp:RequiredFieldValidator ID="NewPasswordRequired" runat="server" 
        ControlToValidate="NewPassword" ErrorMessage="New Password is required." 
        ToolTip="New Password is required." ValidationGroup="ChangePassword1">*</asp:RequiredFieldValidator>
    

    此时不能使用ChangePassword的NewPasswordRegularExpression属性更改正则表达式。您必须这样做:

    protected void Page_Init(object sender, EventArgs e)
    {
        RegularExpressionValidator validator
            = ((RegularExpressionValidator)(ChangePassword1.Controls[0].FindControl("NewPasswordRegExp")));
    
        validator.ValidationExpression = Membership.PasswordStrengthRegularExpression;
        validator.ErrorMessage = "Regex Error Message";
    }
    

    我希望这有帮助。

        2
  •  0
  •   Saar    16 年前

    对不起,我花了太长时间才回来。

    此外,使用NewPasswordRegularExpression以及PasswordStrengthRegularExpression验证密码。因此,NewPasswordRegularExpression不应违反PasswordStrengthRegularExpression中定义的规则。

    例如

    passwordStrengthRegularExpression="^*(?=.{7,})(?=(.*\W){1,})(?=(.*\d){1,})"
    NewPasswordRegularExpression="^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\W).*$"
    

    很好。

    希望这对你有帮助。

    :regex前瞻性错误。
    http://blog.stevenlevithan.com/archives/regex-lookahead-bug