Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/08/2006, 19h38   #1
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
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 :
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
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2006, 19h43   #2
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
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 : 836
Points : 712
Points : 712
Moi j'ai codé mon eregi comme cela :

Code :
^[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, ...
Elwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2006, 19h51   #3
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
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 :
if (!eregi ("[a-zA-Z0-9_\.-]+", $_POST[login]))
Là aussi les identifiants avec espace ne sont pas refusés.

Merci!

webrider
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2006, 20h28   #4
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
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.
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2006, 20h45   #5
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2006, 22h58   #6
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
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
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2006, 23h02   #7
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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) !
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 10h30   #8
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Ben ouais j'ai complètement déformé tes propos hier soir, à croire que j'étais dans le cirage!

@++

webrider
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h58.


 
 
 
 
Partenaires

Hébergement Web