03 Mar2016
Validation des données d'une carte de crédit
Objectifs:
- Valider des entrées utilisateur en ASP.NET.
- Utiliser les contrôles de validation RequiredFieldValidator, RegularExpressionValidator et RangeValidator.
- 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 des informations d’une carte de crédit en utilisant les contrôles de validation.
Les données saisies doivent respecter les contraintes suivantes:
- Tous les champs sont obligatoires
- La date d’expiration doit être au format MM/AAAA (Attention: 13/2016 est invalide!!)
- La date d’expiration doit être supérieure à la date courante
- Le montant doit être un entier positif compris entre 100 et 10000
- Le numéro de la carte doit être valide en respectant la règle suivante :
Chaque type de carte a une longueur et un préfixe numérique :
Type de carte | Préfixe | Nombre de chiffre | Exemple |
MasterCard | De 51 à 55 | 16 | 5109210173049302 |
Visa | 4 | 13 ou 16 | 4012829173921881 |
American Express | 34 ou 37 | 15 | 371449635398431 |
Les contrôles de validation utilisés:
- Tous les champs sont obligatoires : RequiredFieldValidator
- La date d’expiration doit être au format MM/AAAA: RegularExpressionValidator2 et CustomValidator2
- La date d’expiration doit être supérieure à la date courante: CustomValidator2
- Le montant doit être un entier positif compris entre 100 et 10000: RangeValidator1
- Le numéro de la carte doit être valide : CustomValidator1
Code ASP.NET
<form id="form1" runat="server"> <table bgcolor="#eeeeee" cellpadding="10"> <tr> <td colspan="3"> <b>Informations de la carte de crédit</b> </td> </tr> <tr> <td > Type de carte: </td> <td> <asp:RadioButtonList id="RadioButtonList1" RepeatLayout="Flow" runat="server"> <asp:ListItem>MasterCard</asp:ListItem> <asp:ListItem>Visa</asp:ListItem> <asp:ListItem>American Express</asp:ListItem> </asp:RadioButtonList> </td> <td> <asp:RequiredFieldValidator id="RequiredFieldValidator1" ControlToValidate="RadioButtonList1" ErrorMessage="Le type de carte est obligatoire." Text="*" runat="server" ForeColor="Red"/> </td> </tr> <tr> <td > Numéro de la carte:</td> <td> <asp:TextBox id="txtNumeroCarte" runat="server" /> </td> <td> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="txtNumeroCarte" ErrorMessage="Le numéro de la carte est obligatoire." Text="*" Display="Dynamic" runat="server" ForeColor="Red"/> <asp:CustomValidator ID="CustomValidator1" ControlToValidate="txtNumeroCarte" ErrorMessage="Le numéro de la carte est invalide." Text="*" Display="Dynamic" runat="server" ForeColor="Red" OnServerValidate="CustomValidator1_ServerValidate"/> </td> </tr> <tr> <td> Date d'expiration (MM/AA):</td> <td> <asp:TextBox id="txtDateExp" runat="server" /> </td> <td> <asp:RequiredFieldValidator id="RequiredFieldValidator3" ControlToValidate="txtDateExp" ErrorMessage="La date d'expiration est obligatoire." Display="Static" Text="*" runat="server" ForeColor="Red"/> <asp:RegularExpressionValidator ID="RegularExpressionValidator2" ControlToValidate="txtDateExp" ErrorMessage="Le format de la date d'expiration est incorrect." ValidationExpression="\d\d/\d\d\d\d" Text="*" Display="Dynamic" runat="server" ForeColor="Red"/> <asp:CustomValidator ID="CustomValidator2" ControlToValidate="txtDateExp" ErrorMessage="La date d'expiration est invalide." Text="*" Display="Dynamic" runat="server" ForeColor="Red" OnServerValidate="CustomValidator2_ServerValidate"/> </td> </tr> <tr> <td> Montant:</td> <td> <asp:TextBox id="txtMontant" runat="server" /> </td> <td> <asp:RequiredFieldValidator id="RequiredFieldValidator4" ControlToValidate="txtMontant" ErrorMessage="Le montant est obligatoire." Display="Dynamic" Text="*" runat="server" ForeColor="Red"/> <asp:RangeValidator ID="RangeValidator1" ControlToValidate="txtMontant" ErrorMessage="Le montant doit être un entier positif compris entre 100 et 10000." Text="*" runat="server" ForeColor="Red" Type="Integer" MaximumValue="10000" MinimumValue="1000">*</asp:RangeValidator> </td> </tr> <tr> <td></td> <td> <asp:Button id="Button1" Text="Valider" runat="server" OnClick="Button1_Click" /> </td> <td></td> </tr> </table> <p> <asp:Label ID="lblMsg" runat="server" ForeColor="Green"></asp:Label> </p> <asp:ValidationSummary id="valSum" DisplayMode="BulletList" EnableClientScript="true" HeaderText="Veuillez corriger les erreurs suivantes:" runat="server" ForeColor="Red"/> </form>
Code-Behind C#
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) { //Validation du numéro de la carte if (RadioButtonList1.Items[0].Selected) { args.IsValid = (Regex.IsMatch(args.Value, "^(51|52|53|54|55)") && args.Value.Length == 16); } else if (RadioButtonList1.Items[1].Selected) { args.IsValid = (Regex.IsMatch(args.Value, "^(4)") && (args.Value.Length == 13 || args.Value.Length == 16)); } else { args.IsValid = (Regex.IsMatch(args.Value, "^(34|37)") && args.Value.Length == 15); } } protected void CustomValidator2_ServerValidate(object source, ServerValidateEventArgs args) { DateTime d; bool valid = false; //Validation de la date bool dateValide = DateTime.TryParseExact(args.Value, "MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out d); if (dateValide) { //La date d’expiration doit être ultérieure à la date courante if (DateTime.Compare(d.AddMonths(1), DateTime.Now) > 0) { valid = true; } } args.IsValid = valid; } protected void Button1_Click(object sender, EventArgs e) { if (Page.IsValid) { lblMsg.Text = "Les informations saisies sont valides. Merci"; } }