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

Langage PHP Discussion :

identifier une adresse email dans une chaine [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut identifier une adresse email dans une chaine
    Bonjour à tous,

    Je viens ici car je n'arrive pas à résoudre un problème de syntaxe pour mon expression régulière suivante :

    Je cherche à récupérer des adresses mails dans un texte quelconque.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $pattern = '/[a-z0-9]+((-|_|\.)?[a-z0-9]+)*@[a-z0-9]+((-|\.)?[a-z0-9]+)*\.[a-z]{2,4}+/';
    $result = preg_match_all( $pattern, $source, $matches );
     
    echo '<pre>';
    print_r($matches);
    echo '</pre>';
    avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $source = 'uvessesprodebsiozfela>tdi7@hotmail.fr';
    Cela ne fonctionne pas alors qu'il devrait me retourner l'adresse : tdi7@hotmail.fr

    avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $source = 'uvessesprodiozfela>tdi7@hotmail.fr';   //(3 caractère supprimés dans la première partie de la chaine)
    Cela fonctionne bien puisque je récupère le mail voulu.

    J'en déduit que mon expression régulière ne fonctionne pas bien... mais j'ai beau chercher... je n'arrive pas à trouver mon erreur.

    Merci à vous pour votre aide.

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $pattern = '#[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}#'; 
    $source = 'uvessesprodebsiozfela>tdi7@hotmail.fr';
     
    $result = preg_match_all( $pattern, $source, $matches );
     
    echo '<pre>';
    print_r($matches);
    echo '</pre>';
     
    // affiche : tdi7@hotmail.fr

  3. #3
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    Merci pour cette réponse, cela m'a permis d'avancer un peu et de repérer d'où venait mon erreur.
    Cependant, je ne souhaite pas utiliser les \w car je voudrais séparer les caractère 'a-z' des '_'.

    En me concentrant sur la partie précédant l'arobase, voila le problème que je rencontre.

    Ce code fonctionne mais n'est pas complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/[a-z0-9]+(\.|\-|\_)?[a-z0-9]+@/';
    En effet, il ne permet pas de récupérer les mail de ce type :

    compte.3_4-5@truc.fr

    J'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $pattern = '/[a-z0-9]+((\.|\-|\_)?[a-z0-9]+)?@/';
    $pattern = '/[a-z0-9]+((\.|\-|\_)?[a-z0-9]+)*@/';
    $pattern = '/[a-z0-9]+((\.|\-|\_)?[a-z0-9]+)+@/';
    mais aucun ne fonctionne

    Avez-vous une idée ? Merci encore

  4. #4
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Essaies ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $pattern = '#[a-z0-9._-]+@[a-z]+\.[a-z]{2,4}#i';

  5. #5
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Merci, ton expression fonctionne parfaitement, mais me permet de récupérer aussi des mails sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .compte-2@fournisseur.com
    Évidemment, ceci n'est pas valide.

  6. #6
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Et comme ca ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $pattern = '#[a-z0-9]+[a-z0-9._-]*@[a-z]+\.[a-z]{2,4}#i';

  7. #7
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Merci Madfrix pour ton temps,

    On se rapproche du but, mais maintenant si on veut chipoter, l'expression laisse passer des résultats tels que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    compte..autre@fournisseur.com

  8. #8
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Voilà qui devrait être bon

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $pattern = '#[a-z0-9]+[._-]?[a-z0-9]*@[a-z]+\.[a-z]{2,4}#i';

  9. #9
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Merci pour ta réactivité

    Je vais être C*****, ne m'en veux pas

    Cette expression ne récupère pas les adresses comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    compte.3-5_9@fournisseur.com
    J'ai donc testé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/[a-z0-9]+([._-]?[a-z0-9]+)*@/';
    Mais cela ne fonctionne pas du tout :s

  10. #10
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Comme ca ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $pattern = '#[a-z0-9]+([._-]?[a-z0-9])*@[a-z]+\.[a-z]{2,4}#i';

  11. #11
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Merci énormément, cela fonctionne exactement comme je le souhaite.

    Je mettais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/[a-z0-9]+([._-]?[a-z0-9]+)*@[a-z]+\.[a-z]{2,4}/i';
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/[a-z0-9]+([._-]?[a-z0-9])*@[a-z]+\.[a-z]{2,4}/i';

    Bref, encore merci pour ta réactivité !

    Petite question bonus : pourquoi tu utilise les # et non des / dans tes expressions ?

  12. #12
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par boosted Voir le message
    Petite question bonus : pourquoi tu utilise les # et non des / dans tes expressions ?

    Question d'habitude tu peux mettre n'importe quelle sorte de délimiteurs.

    Pense au tag résolu

  13. #13
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Ok, c'est noté

    Je poste ici l'expression finale que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#[a-z0-9]+([._-]?[a-z0-9])*@[a-z0-9]+([.-]?[a-z0-9])*\.[a-z]{2,4}#i';

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

Discussions similaires

  1. Accéder à une adresse contenu dans une adresse
    Par Qooort dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 22/06/2013, 00h33
  2. Verifier la presence d'un @ dans une adresse Email
    Par hugues03 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/07/2010, 19h29
  3. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  4. Vérifier plus largement une adresse email dans un formulaire
    Par DJ Caësar 9114 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2009, 16h20
  5. extraire une adresse email d'un chaine de caractere
    Par sympho dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 22/05/2007, 01h15

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