Change Kontrolle und Einstellung regulärer Ausdruck für neues Passwort
-
19-09-2019 - |
Frage
Dies scheint, wie es eine einfache Lösung haben sollte, aber ich kann nicht scheinen, um es zu finden.
Ich bin mit dem ChangePassword
Steuerelement in einer ASP.NET 2.0-Anwendung, sowohl die ChangePasswordTemplate
und SuccessTemplate
mit benutzerdefiniertem Styling zu definieren. Die Textfelder haben IDs wie folgt
Aktuelles Passwort Textbox ID = CurrentPassword
Neues Passwort Textbox ID = NewPassword
Neues Kennwort bestätigen Textbox ID = ConfirmPassword
Für DRY
Gründen möchte ich den regulären Ausdruck verwenden, die im Custom Membership Provider definiert ist, das neue Passwort Client-Seite zu überprüfen. Leider Eigenschaft, Einstellung der ChangedPassword
Steuerung wie folgt
ChangePassword.NewPasswordRegularExpression =
Membership.PasswordStrengthRegularExpression;
ChangePassword.NewPasswordRegularExpressionErrorMessage =
"Regex Error Message";
in Page_Init
setzt den Ausdruck auf den erwarteten Wert, aber nicht Ursache Client-Seite Validierung auf das neue Passwort geschehen (die Seite Beiträge zurück und der Standard-Mitgliedschaft ChangePassword
Ausfall Text wird angezeigt).
konnte ich eine RegularExpressionValidator
im ChangePasswordTemplate
verwenden und die ValidationExpression
Eigenschaft auf Membership.PasswordStrengthRegularExpression
gesetzt, aber die beste Art und Weise, dass ich sehen kann, erfordert dies zu tun Rekursion durch die Steuerelemente in der Vorlage die RegularExpressionValidator
zu finden und die Eigenschaft festlegen, die mich glauben macht, dass es einen eleganteren Weg sein. Ich habe andere Validator Steuerelemente in der Vorlage (Pflichtfelder und vergleichen Validator), falls dies kann einen Konflikt mit Verwendung der ChangePassword
Validierungseigenschaften verursachen.
Meine Frage ist dann, tut die ChangePassword
Kontrolle des NewPasswordRegularExpression
Eigenschaft der Arbeit, wenn Vorlagen verwenden oder muss ich die RegularExpressionValidator
Steuer Weg gehen?
EDIT:
ein Kopfgeld auf diese Angeboten, wie ich keine definitive Antwort auf die Frage, warum die ChangePassword
Kontrolle des NewPasswordRegularExpression
Eigenschaft nicht Validate Client-Seite finden.
Lösung
Wenn Sie „Convert to Template“ verwenden, wird die RegularExpressionValidator Steuerung nicht automatisch erstellt und kann daher nicht auf die letzte Seite gerendert. Dies kann durch die Anzeige der Seite Quelle bestätigt werden, bevor und nachdem auf Vorlage konvertieren.
Um ein RegularExpressionValidator hinzufügen genau wie die einer ASP.NET Anwendungen ohne die Vorlage, definieren sie zwischen dem NewPassword TextBox und dem RequiredFieldValidator wie folgt aus:
<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>
Sie können nicht die NewPasswordRegularExpression Eigenschaft Change verwenden den regulären Ausdruck an dieser Stelle zu ändern. Sie werden diese stattdessen zu tun haben:
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";
}
Ich hoffe, das hilft.
Andere Tipps
Leider dauerte es zu lange zurück zu kommen.
Password wird auf Server-Seite validiert. und NewPasswordRegularExpression auf Client-Seite validiert. Und hier ist der Unterschied. Durch Fehler in JSScript / VSScript REGx Validierung, wird auf dem Server überprüft wird jeder regulären Ausdruck, der nicht in browswer validiert.
Zusätzlich wird das Passwort mit NewPasswordRegularExpression als auch Password validiert erhalten. So NewPasswordRegularExpression sollte die Regel nicht brechen in Password definiert.
z.
passwordStrengthRegularExpression="^*(?=.{7,})(?=(.*\W){1,})(?=(.*\d){1,})"
NewPasswordRegularExpression="^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\W).*$"
funktioniert.
Hope dies hilft Ihnen.
Aktualisieren : regex Look-Ahead-Fehler.
http://blog.stevenlevithan.com/archives/regex-lookahead-bug