Problème d'expression rationnelle pour vérifier un email
11 messages
• Page 1 sur 1
- psychoreflex
- WRInaute passionné

- Messages: 1123
- Inscription: 10 Juil 2005
Problème d'expression rationnelle pour vérifier un email
Bonjour,
J'ai un petit problème avec l'expression rationnelle ci-dessous, qui vérifie si le mail entré dans le formulaire est conforme au masque.
Le problème, c'est qu'un email de la forme @bob.com va passer quand même, alors qu'il n'y a rien devant le @.
Auriez-vous la solution ?
J'ai un petit problème avec l'expression rationnelle ci-dessous, qui vérifie si le mail entré dans le formulaire est conforme au masque.
- Code: Tout sélectionner
if(preg_match( "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-z]{2,4}$/", $email ))
{$emailVerif=1;}
Le problème, c'est qu'un email de la forme @bob.com va passer quand même, alors qu'il n'y a rien devant le @.
Auriez-vous la solution ?
- psychoreflex
- WRInaute passionné

- Messages: 1123
- Inscription: 10 Juil 2005
Non c'est bon, c'est mon script qui foirait, plus bas.
Merci à toi Suede.
Merci à toi Suede.
-

ortolojf - WRInaute passionné

- Messages: 1676
- Inscription: 14 Aoû 2002
Re: Problème d'expression rationnelle pour vérifier un email
psychoreflex a écrit:
- Code: Tout sélectionner
if(preg_match( "/^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\.-]{2,}[\.][a-z]{2,4}$/", $email ))
{$emailVerif=1;}
Auriez-vous la solution ?
Bonjour
Dans une première approche, j'ai rajouté le backslash ( \ ) avant chaque point ( . ) , car sinon, le point situé entre deux [ ] désigne n'importe quel caractère, même quand ce n'est pas un point....
Et puis, telle quelle, cette expression rationnelle matchera aussi des adresses emails, où plusieurs points se suivent, soit à gauche, soit à droite de l'arobase ( @ ), sans caractère autre intermédiaire.
A améliorer donc...
Bien à toi.
Amicalement.
Jean-François Ortolo
- psychoreflex
- WRInaute passionné

- Messages: 1123
- Inscription: 10 Juil 2005
Salut Jean François,
Je ne sais pas si j'ai bien lu ce que tu dis, mais j'ai essayé d'entrer les emails suivants pour tester :
bob@bob-com
bob*bob@bob.com
bob@bob:com
Tous ont été bloqué avec l'expression rationnelle que j'ai écrit en haut.
C'est de ces caractères, dont tu parlais ?
Je ne sais pas si j'ai bien lu ce que tu dis, mais j'ai essayé d'entrer les emails suivants pour tester :
bob@bob-com
bob*bob@bob.com
bob@bob:com
Tous ont été bloqué avec l'expression rationnelle que j'ai écrit en haut.
C'est de ces caractères, dont tu parlais ?
-

ortolojf - WRInaute passionné

- Messages: 1676
- Inscription: 14 Aoû 2002
psychoreflex a écrit:Salut Jean François,
Je ne sais pas si j'ai bien lu ce que tu dis, mais j'ai essayé d'entrer les emails suivants pour tester :
bob@bob-com
bob*bob@bob.com
bob@bob:com
Tous ont été bloqué avec l'expression rationnelle que j'ai écrit en haut.
C'est de ces caractères, dont tu parlais ?
Bonjour psychoreflex
Théoriquement, le point [.] peut remplacer un caractère, c'est-à-dire je crois ( pas sûr ), une lettre majuscule ou minuscule, ou un chiffre.
Donc, c'est logique que l'astérisque ou le tiret à droite de l'arobase, ne passent pas.
Mais, si tu testais avec ton expression rationnelle l'expression suivante, cela ne devrait pas passer:
bob.bob@bob.com
En effet, il me semble que le point [.] ne se désigne pas lui-même. Je peux me tromper.
Si je dis que l'expression rationnelle peut être améliorée, c'est que j'ai vu récemment sur le forum fr.comp.lang.php un thread sur le même sujet, où ce problème était résolu de façon très complexe, à cause de la RFC je ne sais plus combien, qui spécifie le format des adresses emails. Cette RFC est, je crois, assez compliquée.
Bien à toi.
Amicalement.
Jean-François Ortolo
- psychoreflex
- WRInaute passionné

- Messages: 1123
- Inscription: 10 Juil 2005
Bon alors j'ai retesté avec bob.bob@bob.com et le mail est validé.
Tu fais bien au passage de me rappeler d'aller jeter un oeil de temps à autre sur les RFC.
Tu fais bien au passage de me rappeler d'aller jeter un oeil de temps à autre sur les RFC.
-

bordas_69 - WRInaute discret

- Messages: 239
- Inscription: 25 Aoû 2005
Dans le temps, j'avais fait une expression rationnelle pour vérifier les email :
Bon, je vérifiais en plus que le domaine existait et qu'il possédait un serveur MX... Mais tu peux uniquement utiliser l'expression :
En espérant que ca a pu t'aider...
- Code: Tout sélectionner
/*******************************************************************************
* Fonction permettant de tester qu'une chaine de caractère est conforme aux
* règles de la création d'un email.
* - La premiere lettre doit etre [a-zA-Z]
* - Ensuite, on peut avoir les caractères [a-zA-Z0-9.-_]
* - Le @ est obligatoire
* - Directement apres, on impose [a-zA-Z]
* - Ensuite, on peut avoir les caractères [a-zA-Z0-9.-_]
* - On termine obligatoirement par .[a-zA-Z]{2,4}
* - Avant le dernier point, il ne peut y avoir que [a-zA-Z0-9]
* - Test DNS du serveur WEB (mail)
* - détermination de l'OS nécessaire car La fonction checkdnsrr n'est
* pas implémentée sous Windows.
* @IN : $email
* @OUT : boolean
* TRUE si $email est une adresse email conforme
* FALSE autrement
* @Auteur : bordas_69
* @Date : 27/04/2005 21:48:59
******************************************************************************/
function test_email ($email)
{
$recherche = '/^[a-zA-Z]+([a-zA-Z0-9]*[\.\-\_]*)*\@[a-zA-Z]+([a-zA-Z0-9]*[\.\-\_]*)*[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/';
//return preg_match($recherche,$email);
if(preg_match($recherche,$email))
{
if (ServeurWeb("localhost")){ //OS WIndows (win32)
if(myCheckDNSRR(array_pop(explode("@",$email)),"MX")) return true;
else return false;
}
else{ //Serveur Linux
if (checkdnsrr(array_pop(explode("@",$email)),"MX")) return true;
else return false;
}
}
else return false;
}
Bon, je vérifiais en plus que le domaine existait et qu'il possédait un serveur MX... Mais tu peux uniquement utiliser l'expression :
- Code: Tout sélectionner
recherche = '/^[a-zA-Z]+([a-zA-Z0-9]*[\.\-\_]*)*\@[a-zA-Z]+([a-zA-Z0-9]*[\.\-\_]*)*[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/';
En espérant que ca a pu t'aider...
-

ortolojf - WRInaute passionné

- Messages: 1676
- Inscription: 14 Aoû 2002
bordas_69 a écrit:
- Code: Tout sélectionner
recherche = '/^[a-zA-Z]+([a-zA-Z0-9]*[\.\-\_]*)*\@[a-zA-Z]+([a-zA-Z0-9]*[\.\-\_]*)*[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/';
En espérant que ca a pu t'aider...
N'y a-t-il pas une légère erreur ?
Cette expression accepte les caractères point ( . ), ou tiret ( - ), ou souligné ( _ ) qui ne soient pas séparés par un ou plusieurs caractères alphanumériques.
A mon avis, la sub-expression:
([a-zA-Z0-9]*[\.\-\_]*)*
à droite et à gauche de l'arobase, aurait intérêt à être remplacée par celle-ci:
([\.\-\_][a-zA-Z0-9]+)*
Dans le cas où il n'y a pas de point, tiret, ni souligné, ça passe.
Dans le cas où l'expression entre parenthèses est instanciée ( donc il y a au moins un point, tiret, ou souligné ), cela nécessite au moins un caractère entre chacun de ces points, tirets, ou soulignés.
Bien à vous.
Amicalement.
Jean-François Ortolo
-

bordas_69 - WRInaute discret

- Messages: 239
- Inscription: 25 Aoû 2005
Donc pour toi l'email : tarata___bidule@truc-machin--chose.com ne doit pas être prise en compte?
Or il n'y a pas de restriction sur cet email... Elle est tt a fait valide...
Or il n'y a pas de restriction sur cet email... Elle est tt a fait valide...
-

ortolojf - WRInaute passionné

- Messages: 1676
- Inscription: 14 Aoû 2002
bordas_69 a écrit:Donc pour toi l'email : tarata___bidule@truc-machin--chose.com ne doit pas être prise en compte?
Or il n'y a pas de restriction sur cet email... Elle est tt a fait valide...
Oui, allors mettons...
([\.\-][a-aA-Z0-9]+([\_][a-zA-Z0-9]+)*)*
à la place de:
([a-zA-Z0-9]*[\.\-\_]*)*
Si tu penses que les tirets peuvent être répétés aussi:
([\.][a-zA-Z0-9]+([\-\_][a-zA-Z0-9]+)*)*
Normalement ça devrait marcher, s'il n'y a pas d'accent.
S'il y a des accents, il suffit de rajouter les lettres accentuées dans les sub-expressions [a-zA-Z0-9]+
Si un tiret peut suivre ou être précédé par un souligné, il suffit de faire autant de sub-expressions ([\-][a-zA-Z0-9]+)* ( ou ([\_][a-zA-Z0-9]+)* ) qu'il y a de caractères supplémentaires ( dans ce cas tiret et souligné ).
Faut voir la RFC.
Bien à vous.
Amicalement.
Jean-François Ortolo
11 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Q° expression rationnelle (preg_match) [je suis bloqué]
- Expression rationnelle qui accepte les accents
- Vérifier email avec une regex javascript
- Vérifier la présence d'une adresse email dans un formulaire
- Script pour vérifier l'intégrité des champs email d'un formulaire
- problème expression régulière
- Problème sur expression régulière
- Explication Rationnelle
- probleme avec une expression specifique
- Petit problème avec un expression régulière.
- Mise à jour des services Postini - 11-02-2009
- Alerte Google Dance - 08-09-2008
- Google News : trucs et astuces - 13-01-2005
- Invitation Gmail - Obtenir un compte Gmail - 15-06-2004
- Google écrit parfois au webmaster en cas de blacklistage - 16-09-2005
- Sandbox, blacklistage et autres pénalités de Google - 16-03-2005
- Nouvelle étude de WebRankInfo : les mots-clés et le référencement - 04-01-2003
- Gestion des droits d'accès dans Google Webmaster Tools - 03-03-2010
Consultez la description détaillée des produits ou services de Google suivants : Hello
- Analyser la classe C de l'adresse IP
Cet outil vous permet de vérifier si plusieurs sites sont hébergés sur la même classe C (adresse IP du serveur). - Analyser le positionnement dans Google
Cet outil vous permet de vérifier si une ou plusieurs page(s) de votre site arrive(nt) dans les premiers résultats de Google, pour certains mots-clés recherchés. - Analyser le positionnement dans Yahoo
Cet outil vous permet de vérifier si une ou plusieurs page(s) de votre site arrive(nt) dans les premiers résultats de Yahoo, pour certains mots-clés recherchés.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


