Problème d'expression rationnelle pour vérifier un email

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par psychoreflex, 22 Avril 2006.

  1. psychoreflex
    psychoreflex WRInaute impliqué
    Inscrit:
    10 Juillet 2005
    Messages:
    809
    J'aime reçus:
    0
    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.



    Code:
    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 ?
     
  2. Suede
    Suede WRInaute passionné
    Inscrit:
    4 Octobre 2002
    Messages:
    2 441
    J'aime reçus:
    0
    Pourquoi ?
    Le + , c'est 1 ou plus normalement?
    Au pire,tu fais comme pour la deuxieme partie {1,}
     
  3. psychoreflex
    psychoreflex WRInaute impliqué
    Inscrit:
    10 Juillet 2005
    Messages:
    809
    J'aime reçus:
    0
    Non c'est bon, c'est mon script qui foirait, plus bas.

    Merci à toi Suede.
     
  4. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 574
    J'aime reçus:
    32

    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
     
  5. psychoreflex
    psychoreflex WRInaute impliqué
    Inscrit:
    10 Juillet 2005
    Messages:
    809
    J'aime reçus:
    0
    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 ?
     
  6. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 574
    J'aime reçus:
    32

    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
     
  7. psychoreflex
    psychoreflex WRInaute impliqué
    Inscrit:
    10 Juillet 2005
    Messages:
    809
    J'aime reçus:
    0
    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.
     
  8. bordas_69
    bordas_69 WRInaute discret
    Inscrit:
    25 Août 2005
    Messages:
    196
    J'aime reçus:
    0
    Dans le temps, j'avais fait une expression rationnelle pour vérifier les email :

    Code:
    /*******************************************************************************
     * 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:
    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...
     
  9. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 574
    J'aime reçus:
    32

    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
     
  10. bordas_69
    bordas_69 WRInaute discret
    Inscrit:
    25 Août 2005
    Messages:
    196
    J'aime reçus:
    0
  11. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 574
    J'aime reçus:
    32

    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
     
Chargement...
Similar Threads - Problème expression rationnelle Forum Date
problème avec expression regulière en java Développement d'un site Web ou d'une appli mobile 21 Août 2015
Problème expression régulière Développement d'un site Web ou d'une appli mobile 1 Avril 2011
Problème avec une expression régulière ereg_replace Développement d'un site Web ou d'une appli mobile 9 Août 2010
Problème pour définir une expression régulière. Développement d'un site Web ou d'une appli mobile 11 Juin 2010
Problème pour définir une expression régulière. Développement d'un site Web ou d'une appli mobile 8 Juin 2010
probleme de slash dans une expression reguliere Développement d'un site Web ou d'une appli mobile 21 Mars 2010
Problème de référencement sur expression clé principale Problèmes de référencement spécifiques à vos sites 18 Octobre 2009
probleme dans mon expression reguliere pour le rewriting URL Rewriting et .htaccess 14 Février 2008
[Résolu] Problème Expressions régulières Développement d'un site Web ou d'une appli mobile 29 Octobre 2007
Petit problème avec un expression régulière. URL Rewriting et .htaccess 13 Avril 2006
problème expression régulière URL Rewriting et .htaccess 8 Janvier 2006
probleme d'Expression reguliere Administration d'un site Web 31 Août 2004
Probleme avec une expression regulière Administration d'un site Web 9 Avril 2004
Problème d'expressions régulières Administration d'un site Web 23 Mars 2004
problème avec le développeur Droit du web (juridique, fiscalité...) 22 Juin 2022
Problème désindexation des pages de Google Débuter en référencement 21 Juin 2022
Problème d'indexation de pages sur Google Problèmes de référencement spécifiques à vos sites 31 Mai 2022
problème de redirection non souhaitée Administration d'un site Web 28 Avril 2022
Problème d'indexation Produits Prestashop Crawl et indexation Google, sitemaps 28 Avril 2022
Problème d'affichage des campagnes Google Ads dans un tableau de bord Data Studio AdWords 26 Avril 2022