ChangePassword 제어 및 새 암호에 대한 정규 표현식 설정
-
19-09-2019 - |
문제
이것은 간단한 솔루션이 있어야하지만 찾을 수없는 것 같습니다.
나는 사용하고있다 ChangePassword
ASP.NET 2.0 응용 프로그램의 컨트롤 ChangePasswordTemplate
그리고 SuccessTemplate
사용자 정의 스타일을 정의합니다. 텍스트 상자에는 다음과 같이 ID가 있습니다
현재 비밀번호 텍스트 상자 ID = 현재 비밀번호
새 비밀번호 텍스트 상자 ID = 새 비밀번호
새 비밀번호를 확인하십시오 텍스트 상자 ID = 비밀번호 확인
을 위한 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과 같은 REGULAREXPRESSIONVALIDATOR를 추가하려면 NewPassword TextBox와 ErdeedFieldValidator 사이를 다음과 같이 정의하십시오.
<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의 NewPasswordwordregularexpression 속성을 사용하여 정규 표현을 변경할 수 없습니다. 대신이 작업을 수행해야합니다.
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으로 검증됩니다. 따라서 NewPasswordwordregularexpression은 PasswordStrengthregularexpression에 정의 된 규칙을 위반해서는 안됩니다.
예를 들어
passwordStrengthRegularExpression="^*(?=.{7,})(?=(.*\W){1,})(?=(.*\d){1,})"
NewPasswordRegularExpression="^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\W).*$"
잘 작동합니다.
이것이 당신에게 도움이되기를 바랍니다.
업데이트: regex lookahead 버그.
http://blog.stevenlevithan.com/archives/regex-lookahead-bug