문제

이것은 간단한 솔루션이 있어야하지만 찾을 수없는 것 같습니다.

나는 사용하고있다 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top