IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[Expression régulière] Adresses mail séparées par des "," ou des ";"


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut [Expression régulière] Adresses mail séparées par des "," ou des ";"
    Bonjour,

    Je cherche à faire un regex qui n'accepte que les chaînes de caractères au format suivant :

    adresse mail simple
    ou
    adresses mails séparées par des "," ou des ";"

    Dans le cas d'une succession d'adresses mails, la dernière n'a pas de "," ou de ";" à la fin.


    J'ai déjà le regex pour vérifier une adresse mail. Il fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string pattern = @"^([a-zA-Z0-9_\.]+)@([a-zA-Z0-9_\-]+)\.([\w]{2,4})$";
    Voilà, si vous avez des idées ou si vous l'avez déjà fait..
    Je cherche de mon côté mais j'ai tendance à vite m'embrouiller avec les expressions régulières.


    Johann

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Un Split avec un char[] { ',' , ';' } et une vérification email par email ?

    Sinon, il faut utiliser un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (^([a-zA-Z0-9_\.]+)@([a-zA-Z0-9_\-]+)\.([\w]{2,4})$)|(^(([a-zA-Z0-9_\.]+)@([a-zA-Z0-9_\-]+)\.([\w]{2,4})[ ]*([,;])[ ]*)+(([a-zA-Z0-9_\.]+)@([a-zA-Z0-9_\-]+)\.([\w]{2,4}))$)
    (probablement des erreurs de parenthèses... )

  3. #3
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.

    Je pense que tu peux simplement splitter ta chaîne et appliquer ta regex existante sur chaque morceau... ce n'est pas très propre mais ça a le mérite d'être simple

    edit : pas assez rapide

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    On peut simplifier ton expression kaidan

    Sans capture par les groupes pour tester uniquement la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?:[\w.]+@[\w-]+\.\w{2,4}[,;]?)*[\w.]+@[\w-]+\.\w{2,4}$
    J'ai mis des \w au lieu des a-zA-Z0-9_ juste pour le confort de lecture.

    Avec capture, ce qui permet de tester et d'avoir accès aux adresses en même temps si besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?:(?<mail>[\w.]+@[\w-]+\.\w{2,4})[,;]?)*(?<mail>[\w.]+@[\w-]+\.\w{2,4})$

  5. #5
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut
    Salut,

    Merci pour vos réponses.
    La méthode du Split c'est excellent, je connaissais pas, c'est parfaitement adapté à mon problème.


    Voici ma méthode de validation :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    /// <summary>
            /// Vérifie si une chaîne de caractères est dans le format 'adresse mail' ou 'succession d'adresse mails'
            /// </summary>
            /// <param name="mail">chaîne de caractères à analyser</param>
            /// <returns>retourne 'true' si la chaîne de caractères passée en paramètre est un format valide. Retourne 'false' dans le cas contraire.</returns>
            public static bool ValidMail(string mail)
            {
     
                string pattern = @"^([a-zA-Z0-9_\.]+)@([a-zA-Z0-9_\-]+)\.([\w]{2,4})$";
                bool validity = true;
     
     
                // 1er Test : Test de la syntaxe pour une unique adresse mail
                bool test1;
                Regex r1 = new Regex(pattern);
                test1 = r1.IsMatch(mail);
     
                if (test1 == true)
                {
                    return validity;
                }
     
                // 2ème Test : Test pour une succession d'adresse mails séparées soit par des ";", soit par des ","
                else
                {
                    validity = true;
     
                    bool test2;
     
                    // Déclaration d'u tableau de séparateurs
                    char []separators = {',',';'};
     
                    // Séparation de la chaîne récupérée d'adresses mails
                    string[] sousChaines = mail.Split(separators);
     
                    // Pour chaque sous chaînes..
                    foreach (string s in sousChaines)
                    {
                        // Si la sous chaîne n'est pas vide..
                        if (s.Equals(string.Empty) == false)
                        {
                            // Vérification de la syntaxe de la sous chaîne
                            Regex r2 = new Regex(pattern);
                            test2 = r2.IsMatch(s.Trim());
     
                            // Si la sous chaîne n'a pas la bonne syntaxe..
                            if (test2 == false)
                            {
                                // validité incorrecte
                                validity = false;
                            }
                        }
                    }
     
                    return validity;
                }
    Par contre j'ai pas testé votre nouveau regex..

    Merci à tous.

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Tu te compliques un peu la vie, on va simplifier ça ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public static bool ValidMail(string mail)
    {
        if (string.IsNullOrEmpty(mail)) { return false; }
     
        string pattern = @"^([a-zA-Z0-9_.]+)@([a-zA-Z0-9_-]+)\.([\w]{2,4})$";
        string[] emails = mail.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
     
        foreach (string s in emails)
        {
            if (!Regex.IsMatch(s.Trim(), pattern))
            {
                return false;
            }
        }
     
        return true;
    }
    Si on considère que des séparateurs qui se suivent sont valides et qu'il peut y avoir des espaces non gênants, ceci devrait donner le même résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static bool ValidMail2(string mail)
    {
        string pattern = @"^(?:\s*(?:[a-zA-Z0-9_.]+@[a-zA-Z0-9_-]+\.\w{2,4})?\s*[,;]?)*\s*(?:[a-zA-Z0-9_.]+@[a-zA-Z0-9_-]+\.\w{2,4})\s*$";
     
        return Regex.IsMatch(mail, pattern);
    }

  7. #7
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut
    Effectivement, tu fais tenir en 10 lignes ce que je fais en 30 lignes.
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Suite d'adresses mail séparée par ,
    Par HABILER dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 15/02/2015, 18h05
  2. Réponses: 1
    Dernier message: 28/06/2012, 17h04
  3. Réponses: 1
    Dernier message: 27/04/2012, 17h41
  4. expression régulière de mail
    Par nymus7 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 03/06/2010, 16h55
  5. Expression régulière adresse mail
    Par nannous dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 22/07/2009, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo