Michel Perfetti
Les expressions régulières
Cet article est une introduction aux expressions régulières et à leur utilisation dans la validation de données
Par Michel Perfetti publié le 07/01/2008 à 06:45
 
La validation en Windows Forms est réalisée grâce à un ensemble d'évènements sur les contrôles graphiques :
  • « Validating » pour la validation en elle-même
  • « Validated » pour effectuer des opérations une fois la validation effectuée
Concentrons-nous sur l'évènement « Validating ». C'est dans cet évènement que nous allons brancher notre expression régulière. Elle sera combinée avec le composant ErrorProvider qui va nous permettre d'informer l'utilisateur de son erreur de saisie. ErrorProvider va afficher à coté du contrôle une icône indiquant une erreur. La classe de type «CancelEventArgs » passée en paramètre de l'évènement contient une propriété Cancel qui permet d'indiquer que la validation a échouée :

private const string PATTERN = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";

private void textBox1_Validating(object sender, CancelEventArgs e)

{

    e.Cancel = !Regex.IsMatch(textBox1.Text,PATTERN);

    if (e.Cancel)

    {

        errorProvider1.SetError(textBox1, "l'e-mail n'est pas valide");

    }

    else

    {

        errorProvider1.SetError(textBox1,String.Empty);

    }

}

Le résultat est le suivant :
 
Validation en Windows Forms

Validation en Windows Forms

 
La technologie ASP.Net possède un avantage par rapport à la technologie windows forms : il existe en standard des validateurs pour toute sorte d'entrées :
  • RequiredStringValidator
  • RangeValidator
  • RegularExpressionValidator (c'est celui-ci qui nous intéresse)
  • CompareValidator
  • CustorValidator
Attachons simplement un RegularExpressionValidator à un champ texte :

<div>

    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1"

        ErrorMessage="Email not valide" 

        ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>

</div>

La validation est réalisée à deux moments :
  • Coté client pour plus d'interactivité avec l'utilisateur,
  • Coté serveur pour valider que les données sont bien conformes.
La deuxième étape est facultative, mais elle est absolument essentielle pour valider les données, rien ne garantit que les données ont bien été validées coté client. Cette validation peut être réalisée validateur par validateur en appelant la méthode « Validate » de chaque validateur puis tester sa propriété IsValid :

RegularExpressionValidator1.Validate();

bool isValid = RegularExpressionValidator1.IsValid;

ou faire la même manipulation sur la page elle-même :

Page.Validate();

Page.IsValid;

Au moment de la saisie, si les données ne sont pas valides, un message apparait :
 
Validation en ASP.Net

Validation en ASP.Net

 
L'une des façons de réaliser des validations d'entrées utilisateurs en WPF est l'implémentation de « Validation Rules ». Il suffit hériter de la classe « System.Windows.Control.ValidationRules » :

internal class RegexValidationRule: ValidationRule

{

    private string _pattern;

 

    public override ValidationResult Validate( object value,

                                               System.Globalization.CultureInfo cultureInfo)

    {

        string strValue = value as string;

 

        if (strValue == null)

        {

            return new ValidationResult(false, null);

        }

 

        try

        {

            Regex regex = new Regex(_pattern);

            bool match = regex.IsMatch(strValue);

            return new ValidationResult(match, false);

        }

        catch

        {

            return new ValidationResult(false, null);

        }

    }

 

 

    public string Pattern

    {

        get

        {

            return _pattern;

        }

        set

        {

            _pattern = value;

        }

    }

}

La propriété Pattern est remplie lors de la déclaration de notre règle de validation directement en xaml :

<TextBox Height="21" Margin="106,0,145.25,94" Name="tbEmail" VerticalAlignment="Bottom" 

        Canvas.Left="59" Canvas.Top="96" Width="226">

    <TextBox.Text>

        <Binding Path="Email">

            <Binding.ValidationRules>

                <validators:RegexValidationRule Pattern="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"/>

            </Binding.ValidationRules>

        </Binding>

    </TextBox.Text>

    <Validation.ErrorTemplate>

        <ControlTemplate>

 

            <Border BorderBrush="Red" BorderThickness="3">

                <AdornedElementPlaceholder />

            </Border>

        </ControlTemplate>

 

    </Validation.ErrorTemplate>

</TextBox>

Dans cet exemple, une bordure rouge est ajoutée sur notre champ lorsqu'il n'est pas valide :
 
Validation en WPF

Validation en WPF

 

 Commentaire - Les expressions régulières 

 Dernières Publications      

Windows Media Center et WCF : développez votre maison intelligente
  Le développement d'applications pour Windows Media Center est facilité avec l'arrivée du SDK 5.3. Même si l'on sent un modèle objet bien lourd derrière, il devient plus facile d'exposer les fonctionnalités de WMC sous la forme de services WCF.
par Frédéric Colin posté le 23/06/2008 à 08:04, lu 295 fois, #0
Notions avancées avec Biztalk Server 2006 R2
  Utilisation des notions d'interchange, corrélation et convoi avec BizTalk Server 2006 R2
par Kader Yildirim posté le 09/06/2008 à 08:04, lu 288 fois, #0
Lucene Persistence Engine pour Evaluant Universal Storage Services
  Suite à l'article de Laurent Kempé, voici un moteur de stockage pour EUSS permettant l'indexation d'entités métier avec Lucene.
par Nicolas Penin posté le 01/06/2008 à 23:38, lu 510 fois, #1
Tags: C#, Linq
XMLA Trivia : Découverte du XMLA
  Le XMLA (XML for Analysis) est un langage normalisé par plusieurs éditeurs BI pour simplifier l'accès aux données aux cubes et aux métadonnées des bases multidimensionnelles.
par Renaud Harduin posté le 25/05/2008 à 11:57, lu 523 fois, #0
Exploiter les données CSV via Linq en toute simplicité
  A partir du requêteur dynamique fourni en exemple avec Visual Studio 2008, nous allons essayer de remplir les propriétés d'un ensemble d'objets à partir des données d'un fichier CSV. Nous enrichirons aussi le parseur de nos propres fonctions.
par Frédéric Mélantois posté le 17/05/2008 à 11:41, lu 1713 fois, #0
Comment manipuler simplement le contenu d'un fichier WordML ?
  Manipulations autour du format WordML
par Fabien Reinle posté le 14/05/2008 à 23:55, lu 781 fois, #0
Polymorphisme et contrats de données WCF
  WCF aborde les types polymorphes du point de vue de la sérialisation. En effet, la connaissance du type réel potentiel est rendue nécessaire dès la description du contrat de données. Une fois n'est pas coutume, j'ai réalisé l'exemple en VB.NET.
par Frédéric Colin posté le 14/05/2008 à 08:40, lu 1881 fois, #2
A la découverte de BizTalk Server 2006 3/3
  Développer un assembleur pour BizTalk Server 2006 R2
par Kader Yildirim posté le 06/05/2008 à 13:20, lu 511 fois, #0

 Dernières Actualités      

Deep Earth – Une belle utilisation de Virtual Earth et de Silverlight Deep Zoom
  Ce projet très intéressant est disponible sur Codeplex et vous pouvez voir une démo sur la page suivante . Bien entendu comme touts les projets sur Codeplex vous avez accès aux sources....
Tags: Silverlight
Sortie de JetBrains ReSharper 4.0 en version finale, l’outil ultime pour Visual Studio
  Après plusieurs mois de Early Access Program (EAP) , JetBrains met enfin à disposition la version finale de son outil ReSharper 4.0 . Cette nouvelle version est disponible pour Visual Studio 2005 &...
Tags: Visual Studio 2008, Visual Studio 2005, Outils
BoutDuTunnel v1.4
  BoutDuTunnel est un petit logiciel de tunneling réseau écrit en C#. Il permet par exemple d’accéder aux services ftp/smtp/pop/telnet/nntp/… sur des réseaux qui n’autorisent...
BI Framework & sample sur CodePlex
  Après plusieurs demandes, je me suis décidé à déposer l'ensemble des sources et du BI Framework MS proposés dans mes articles sur codeplex : http://www.codeplex.com/BILAB Je le mettrais à jour au fil des...
Injection de code et API de profiling .NET
  Si vous êtes intéressés par la sécurité du Framework, par le reverse engineering et la manipulation/injection de code .NET et les packers, alors jetez un coup d’œil...
NDepend pour l'analyse statique de code .NET
  Pour ceux qui ne connaissent pas NDepend , il s’agit d’un outil d’analyse statique de code .NET qui permet de remonter des informations à toute une équipe de développement. NDepend aide à travailler sur...
Tags: Outils