Validation avancée d'un mot de passe
Objectifs:
- Valider des entrées utilisateur en ASP.NET.
- Utiliser les contrôles de validation RequiredFieldValidator, CompareValidator, RegularExpressionValidator et CustomValidator.
- Validation personnalisée avec le contrôle CustomValidator.
- Regrouper les messages d'erreur dans le contrôle ValidationSummary
- Ecrire des expressions régulières.
Énoncé:
Réaliser une page en ASP.Net qui permet de valider un formulaire de saisie d'un identifiant et d'un mot de passe en utilisant les contrôles de validation.
Les données saisies doivent respecter les contraintes suivantes:
- Le mot de passe doit:
- contenir au moins 8 caractères
- contenir au moins une lettre MAJUSCULE
- contenir au moins une lettre minuscule
- contenir au moins un chiffre
- contenir un caractère spécial (@ # & % ! = ? + - * /)
- ne peut contenir l'identifiant du compte
- Le champ de confirmation doit correspondre au 1er champ Mot de passe.
- Tous les champs sont obligatoires
Les messages d'erreur doivent être afficher en bas du formulaire.
Lorsque toutes les données sont validées, afficher un message de bienvenue:
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script type="text/javascript"> function PassIdentifiantValidation(source, args) { var identifiant = document.getElementById("TextBox1").value; var pass = args.Value; if (identifiant && pass.indexOf(identifiant) != -1) { args.IsValid = false; } else { args.IsValid = true; } } </script> </head> <body> <form id="form1" runat="server"> <h3>Formulaire de saisie du mot de passe</h3> <div> <asp:Label ID="Label1" runat="server" Text="Identifiant" Width="180px"></asp:Label> <br /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage="L'identifiant est obligatoire." ForeColor="Red" Text="*" /> <br /> <br /> <asp:Label ID="Label2" runat="server" Text="Mot de passe" Width="180px"></asp:Label> <br /> <asp:TextBox ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="TextBox2" Display="Dynamic" ErrorMessage="Le mot de passe est obligatoire." ForeColor="Red" Text="*" /> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox2" ErrorMessage="Le mot de passe doit comporter au moins 8 caractères." ForeColor="Red" Text="*" Display="Dynamic" ValidationExpression=".{8,}" /> <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ControlToValidate="TextBox2" Display="Dynamic" ErrorMessage="Le mot de passe doit contenir au moins une lettre MAJUSCULE." ForeColor="Red" Text="*" ValidationExpression=".*[A-Z].*" /> <asp:RegularExpressionValidator ID="RegularExpressionValidator3" runat="server" ControlToValidate="TextBox2" Display="Dynamic" ErrorMessage="Le mot de passe doit contenir au moins une lettre minuscule." ForeColor="Red" Text="*" ValidationExpression=".*[a-z].*" /> <asp:RegularExpressionValidator ID="RegularExpressionValidator4" runat="server" ControlToValidate="TextBox2" Display="Dynamic" ErrorMessage="Le mot de passe doit contenir au moins un chiffre." ForeColor="Red" Text="*" ValidationExpression=".*[0-9].*" /> <asp:RegularExpressionValidator ID="RegularExpressionValidator5" runat="server" ControlToValidate="TextBox2" ErrorMessage="Le mot de passe doit contenir au moins un caractères spécial (@ # & % ! = ? + - * /)." ForeColor="Red" Text="*" Display="Dynamic" ValidationExpression=".*[@#&%!=?+*-/].*" /> <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBox2" ErrorMessage="Le mot de passe ne peut pas contenir l'identifiant." ForeColor="Red" Text="*" Display="Dynamic" ClientValidationFunction="PassIdentifiantValidation"/> <br /> <br /> <asp:Label ID="Label3" runat="server" Text="Confirmer le mot de passe"></asp:Label> <br /> <asp:TextBox ID="TextBox3" runat="server" TextMode="Password" ></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="TextBox3" Display="Dynamic" ErrorMessage="La confirmation du mot de passe est obligatoire." ForeColor="Red" Text="*" /> <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToCompare="TextBox2" ControlToValidate="TextBox3" ErrorMessage="Les deux mots de passe ne sont pas identiques" ForeColor="Red" Text="*" /> <br /> </div> <div> <br /> <asp:Button ID="Button1" runat="server" Text="Valider" OnClick="Button1_Click" /> <br /> <br /> <asp:Label ID="lblMsg" runat="server" ForeColor="Green"></asp:Label> <br /> </div> <div> <asp:ValidationSummary ID="ValidationSummary1" runat="server" ForeColor="Red" HeaderText="Veuillez corriger les erreurs suivantes:" /> <br /> </div> </form> </body> </html>
- On peut remplacer l'expression [@#&%!=?+*-/] par \W qui correspond aux caractères non alphanumériques.
- On peut utiliser un seul contrôle RegularExpression avec l'expression ^(?=.*[\W])(?=.*[\d])(?=.*[A-Z])(?=.*[a-z]).{8,}$ mais cela ne permet pas d'afficher un message approprié.
protected void Button1_Click(object sender, EventArgs e) { if (Page.IsValid) { lblMsg.Text = "Les données saisies sont valides. Merci!"; } }
La propriété IsValid permet d'indiquer si la validation de la page a réussi.
Si vous obtenez le message d'erreur suivant:
WebForms UnobtrusiveValidationMode nécessite un ScriptResourceMapping pour 'jquery'.
Ce message indique qu'il faut ajouter JQuery à votre projet pour utiliser l'option UnobtrusiveValidationMode qui fait la validation en JQuery dans le Framework 4.5..
Une autre solution consiste à ajouter dans le fichier Web.config la section suivante:
<appSettings> <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /> </appSettings>
Cette déclaration permet de désactiver l'option UnobtrusiveValidationMode.
Sinon (mais déconseillé) vous pouvez laisser cet option activée et passer au Framework 4.0 en donnant la valeur "4.0" à la propriété targetFramework du fichier Web.config.