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 :

Fonctions eregi ou ereg [RegEx]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Fonctions eregi ou ereg
    bonjour,

    le décor : je démarre dans le dev PHP - avec easyphp

    objectif "final" de mon bout de code : contrôler la forme d'une adresse mail
    avec la fonction eregi.
    (j'ajoute ce controle à mon formulaire de contact tout neuf qui fonctionne
    par ailleurs)

    Devant l'échec de mon code , je limite mes ambitions d'expression régulière
    pour avancer pas à pas ..
    pour des raisons de facilité, je teste sur le champ du prénom
    çà ne marche toujours pas.

    J'ai fait le choix de charger mon expression régulière par morceaux pour
    plus de lisibilité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     $patron  = "#^";            /* début expression */
     $patron .= "[a-z]+";      /* nom - premier groupe de caractères*/
     $patron .= "$#";            /* fin expression */
    L'appel de la fonction dans la séquence de contrôle des champs du formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        else if (!eregi($patron, $leprenom))
         {echo '<h3 class="alerte"> prénom non conforme</h3>';
          echo '<br/>'.$leprenom.' ** '.$patron;
         }
    je saisis dans le prénom : fred, résultat :

    prénom non conforme
    fred ** #^[a-z]+$#
    je ne vois pas le problème.. çà devrait pourtant être simple..

    J'ai essayé différentes formules .. mais pas la bonne.. :
    - sans #
    - apostrohes plutot que guillemets
    - les lettres fred plutôt que a-z
    - ne saisir que f dans le formulaire

    bref, je sèche.

    merci de votre aide,

    FF

  2. #2
    Membre du Club
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    Salut,

    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $patron = "/^([a-z]+)$/";

    Mais cette expression suppose que ton prénom ne contienne pas de majuscules

  3. #3
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    je te conseillerais plutot ceci, avec l'utilisation de preg_match() :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $regex = "#^[a-z]+$#i";
    $name = "Fred";
    if (preg_match($regex, $name)) {
    	echo "OK";
    } else {
    	echo "KO";
    }
    ?>

    [a-z]+ <= une ou plusieurs fois parmis le range de caractères
    #i <= insensible à la casse

  4. #4
    Membre du Club
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 43
    Points
    43
    Par défaut
    en effet la réponse de darkstar123456 est plus complète que la mienne

    n'oublie pas


    Bonne journée

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Amaury_35 Voir le message
    en effet la réponse de darkstar123456 est plus complète que la mienne

    n'oublie pas


    Bonne journée
    Et bien merci à tous les deux.

    1) Amaury, ta proposition n'a rien donné.

    2) la formule de darkstar fonctionne sur mon test rudimentaire.

    Il ne me reste plus qu'à étoffer tout çà pour traiter une adresse mail.


    Vous auriez une explication du non fonctionnement de eregi ?

    merci encore,

    FF

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Tant qu'à faire puisque tu débute autant oublier les ereg* tout de suite puisque dépréciées dans PHP depuis la 5.3 :
    http://fr.php.net/manual/fr/migration53.deprecated.php

  7. #7
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Citation Envoyé par grunk Voir le message
    Tant qu'à faire puisque tu débute autant oublier les ereg* tout de suite puisque dépréciées dans PHP depuis la 5.3 :
    http://fr.php.net/manual/fr/migration53.deprecated.php
    arf plus rapide que moua j'ai oublié de refresh la page avant de répondre

    Note: À partir de PHP 5.3.0, l'extension regex est obsolète : un appel à cette fonction émettra une erreur de niveau E_DEPRECATED.

    Note: preg_match(), qui utilise la syntaxe des expressions rationnelles compatibles PERL, est une alternative plus rapide de ereg().
    Source : ereg()


    Il ne me reste plus qu'à étoffer tout çà pour traiter une adresse mail.
    En réalité, une adresse e-mail est tellement compliqué à matcher, qu'on simplifie selon ses besoins... voici la regex officielle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
    et perso, voici ce que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /^[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,3}$/i

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    filter_var est aussi vachement pratique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(filter_var($email,FILTER_VALIDATE_EMAIL))
        return true
    http://fr.php.net/manual/fr/function.filter-var.php

  9. #9
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Citation Envoyé par grunk Voir le message
    filter_var est aussi vachement pratique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(filter_var($email,FILTER_VALIDATE_EMAIL))
        return true
    http://fr.php.net/manual/fr/function.filter-var.php
    effectivement... mais je l'oublie souvent

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    effectivement... mais je l'oublie souvent
    bon, trop tard, j'essaierais une autre fois.

    j'ai fait avec preg_ et çà fonctionne, motif alimenté comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     $motif  = "#^";		    	                           /* début expression  */
     $motif .= "[[:alnum:]]";            /* nom - premier groupe de caractères*/
     $motif .= "([-_.]?[[:alnum:]])+_?";           /* nom - groupes  délimités */
     $motif .= "@";			                                        /* arobase */
     $motif .= "[[:alnum:]]";     /* domaine - premier groupe de caractères */
     $motif .= "([-.]?[[:alnum:]])+";   	     /* domaine - groupes délimités */
     $motif .= "\.[a-z]{2,6}";			           /* domaine - suffixe */
     //$motif .= "[a-z]+";				 /* TEST simple alphabétique */
     $motif .= "$#i";            		  /* fin expression  et ignorer casse */
    Je ne sais pas si l'idée est bonne mais ce découpage me donne plus de lisibilité.

    encore merci pour toutes ces infos

    FF

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

Discussions similaires

  1. Qu'utiliser à la place de la fonction eregi ?
    Par Alexandrebox dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 06/04/2012, 13h18
  2. erreur fonction eregi
    Par ideal23 dans le forum Langage
    Réponses: 2
    Dernier message: 28/02/2010, 21h27
  3. eregi ou ereg?
    Par teramp3 dans le forum Langage
    Réponses: 5
    Dernier message: 02/10/2009, 18h50
  4. [RegEx] Récupérer résultat fonction eregi
    Par dev197 dans le forum Langage
    Réponses: 4
    Dernier message: 30/09/2009, 16h51
  5. Vérifier la fonction eregi
    Par mathias59 dans le forum Langage
    Réponses: 4
    Dernier message: 22/03/2009, 19h19

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