ChangePassword控件和新密码设置的正则表达式
-
19-09-2019 - |
题
这似乎应该有一个简单的解决方案,但我似乎无法找到它。
我使用在ASP.NET 2.0应用程序的控制ChangePassword
,同时使用ChangePasswordTemplate
和SuccessTemplate
定义自定义样式。文本框具有的ID如下
当前密码文本框ID = <强> CurrentPassword 强>结果 新密码文本框ID = <强> NEWPASSWORD 强>结果 确认新密码文本框ID = <强> ConfirmPassword 强>
有关DRY
原因,我想使用在自定义成员资格提供定义验证新密码客户侧的正则表达式。不幸的是,设置ChangedPassword
控件的属性如下:
ChangePassword.NewPasswordRegularExpression =
Membership.PasswordStrengthRegularExpression;
ChangePassword.NewPasswordRegularExpressionErrorMessage =
"Regex Error Message";
在Page_Init
将表达式的预期值,但不会导致客户端验证对新密码(页面回和标准会员ChangePassword
失败的文本被显示)发生。
我可以在RegularExpressionValidator
使用ChangePasswordTemplate
并设置ValidationExpression
属性Membership.PasswordStrengthRegularExpression
但我可以看到要做到这一点,需要通过控制模板递归找到RegularExpressionValidator
和设置属性,这使我相信,最好的办法必须有一个更优雅的方式。我在模板其他验证程序控件(需要字段和比较验证器),在此情况下,可能会导致与使用ChangePassword
验证属性的冲突。
我的问题是,然后,使用模板时做的ChangePassword
控制的NewPasswordRegularExpression
财产的工作或我需要下井RegularExpressionValidator
控制路线?
修改强>
中提供了一个赏金这个,因为我无法找到一个明确的答案,为什么ChangePassword
控制的NewPasswordRegularExpression
财产不验证客户端。
解决方案
如果您使用“转换为模板”,该控件的作用是不会自动创建,因此不渲染到最后一页。这可以通过之前查看的网页源和转换为模板后得到证实。
要添加的RegularExpressionValidator酷似一个ASP.NET使用无模板,将NEWPASSWORD TextBox和像这样的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";
}
我希望这有助于。
其他提示
对不起,我花了太长时间回来。
PasswordStrengthRegularExpression在服务器端进行验证。和NewPasswordRegularExpression在客户端验证。这里的区别。由于JSScript / VSScript至REGx的验证问题,这在服务器验证每一个正则表达式不会browswer验证。
此外密码获得与NewPasswordRegularExpression验证以及PasswordStrengthRegularExpression。所以NewPasswordRegularExpression不应打破PasswordStrengthRegularExpression定义的规则。
e.g。
passwordStrengthRegularExpression="^*(?=.{7,})(?=(.*\W){1,})(?=(.*\d){1,})"
NewPasswordRegularExpression="^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\W).*$"
工作正常。
希望这有助于你。
的更新强>:正则表达式先行错误。点击 http://blog.stevenlevithan.com/archives/regex-lookahead-bug