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 :

Expressions régulières : problème avec e-mail [RegEx]


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Expressions régulières : problème avec e-mail
    Bonjour,

    Je teste sous PHP les expressions régulières pour valider l'e-mail d'un formulaire avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!eregi ("[a-zA-Z0-9_\.-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,3}", $_POST[mail])) 
    {
       $erreurs +=1;
    }
    En soi le code fonctionne sans souci mais l'expression régulière me laisse passer des e-mails invalides quand elles contiennent des espaces.

    Une adresse du genre 'nom prenom @isp.com' passe au travers alors qu'elle ne devrait pas (je ne dis nulle part que l'espace est autorisé!).

    J'ai testé l'expression avec regex coach et là ça ne passe pas! Est-ce une légère défaillance de PHP?

    Comment empêcher ce comportement?

    Merci!

    webrider

  2. #2
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Moi j'ai codé mon eregi comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,3}$
    et les espaces ne passent pas

    Voila si ca peut t'aider
    Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
    Nicolas Jaar, Paul Kalkbrenner, Marek Hermann

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci Elwyn ça me dépanne mais ça ne me dit pas pourquoi ces e-mails passent à travers mon expression? Ce serait sympa de le savoir au cas où j'aurais besoin de tester d'autres champs.

    En y pensant j'ai déjà un autre champ à tester : l'identifiant que je voudrais sans espace mais _ . et - sont acceptés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!eregi ("[a-zA-Z0-9_\.-]+", $_POST[login]))
    Là aussi les identifiants avec espace ne sont pas refusés.

    Merci!

    webrider

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    N'oublie pas les caractères ^ et $ respectivement en début et fin d'expression régulière
    Je pense que ton problème viens de là, par exemple pour l'adresse email, nom prenom@isp.com est validé car prenom@isp.com correspond au masque, donc ereg() retourne vrai car elle trouve une occurence du masque.
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    1- La réponse est dans la FAQ
    2- Les ereg() sont tellement obsolètes que PHP6 ne les proposera même plus en standard, il faut utiliser les preg maintenant
    3- Il y a un super tuto à ce sujet : Initiation aux expressions régulières en PHP

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci à vous deux pour vos réponses.

    J'ignorais que les expressions régulières seraient complètement obsolètes dans la prochaine version de PHP, content de l'apprendre : je ne les utiliserai plus par souci de portabilité.

    Je vais aussi essayer la proposition de Taum en attendant de parcourir complètement le tuto de Yogui!

    Bonne soirée à toutes et tous,

    webrider

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Non lol, tu m'as mal compris : les expressions régulières POSIX sont obsolètes mais pas les expressions régulières compatibles Perl (PCRE) !

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ben ouais j'ai complètement déformé tes propos hier soir, à croire que j'étais dans le cirage!

    @++

    webrider

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/06/2011, 18h34
  2. [VB.net express edition] problème avec MSFlexGrid et MSChart
    Par kinganasius dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/12/2006, 16h12
  3. Problème avec Yahoo Mail ?
    Par drinkmilk dans le forum Dépannage et Assistance
    Réponses: 5
    Dernier message: 24/07/2006, 00h06
  4. Réponses: 6
    Dernier message: 17/11/2005, 14h39

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