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 :

Besoin d'aide sur une regex [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut Besoin d'aide sur une regex
    Bonjour,

    Je vous écris car j'ai un bout de code qui me pose problème =(

    voila j'ai des adresses mails de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    totoelise@yahoo.com_0
    totoelise@yahoo.com_1
    totoelise@yahoo.com_2
    totoelise@yahoo.com_3
    totoelise@yahoo.com_4
    Mon but est de faire un traitement spécifique quand l'adresse mail à son nombre après le "_" qui est supérieur ou égal à 4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	if (preg_match('!_[4|5|6|7|8]!', $email) == 1) {
     
    }
    La mon code est est juste nul =( car j'énumère tout mais je ne sais pas comment dire :
    toutes les adresses avec un chiffre >= à 4 après le "_" je fais mon script =(


    Est ce que quelqu'un pourrait m'aider svp =(


    .... car là mon code est honteux ^^

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Question : est-ce que le nombre peut être supérieur à 9 ? (autrement dit, faut-il gérer les dizaines, centaines, etc ?)

    Sinon, "underscore suivi d'un seul chiffre entre 4 à 9" ça donne ça : '!_[4-9]!'
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut
    Bonjour Celira et merci de vouloir m'aider !! c'est très gentil à toi !

    Alors pour répondre à ta question : oui le chiffre peut être supérieur à 9 =(


    merci a toi !

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Donc il te faut une regex qui teste "qui finit par un seul chiffre entre 4-9 ou plusieurs chiffres" (en espérant qu'il ne faille pas gérer les nombres du genre "00001")
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Juste pour ta culture personnelle, la syntaxe '!_[4|5|6|7|8]!' n'est pas correcte. Les éléments entre crochets dans une regex correspondent à ce qu'on appelle un classe et détermine un liste de caractères possibles à rechercher, donc ta notation signifie "rechercher soit un 4, soit un |, soit un 5, soit un |, soit un 6, soit un |, soit un 7, soit un |, soit un 8, soit un |, soit un 9". En d'autres termes, le pipe est implicite entre chaque caractère présent dans une classe et le rajouter est non seulement inutile mais modifie la regex en autorisant le caractère | sans que cela soit souhaité !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut
    a nonono c'est tout simple ^^

    de 4 jusqu'a 50 au pire mais la serie de chiffre est basic, mais pour moi la mettre sous forme de regex c'est cotton =(

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    De 4 à 99, ça donnerait à priori : '!_(?:[1-9]\d|[4-9])!'.

    EDIT
    Je rajouterais même '!_(?:[1-9]\d|[4-9])$!' histoire d'être sûr que la correspondance se fasse bien en fin de chaine.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    moi je ferais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (preg_match('~_(?:[1-3][0-9]|[4-9])[0-9]*$~', $email)) {
     
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  9. #9
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut
    Bonjour à tous ceux qui m'ont aidé ^^

    Une grand mercii !!!
    La regex de Bovino a marché parfaitement !!
    Par contre pour ma culture, comment tu la li ? =(

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     '!_(?:[1-9]\d|[4-9])$!'
    j'ai du mal à comprendre l'intervalle de 4 à 99 =(

  10. #10
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    en français ça donnerait :
    _ : un underscore
    suivi par
    (?: : un ensemble de possibilités (je ne rappelle le nom exact)
    [1-9]\d : un chiffre entre 1 à 9, puis un nombre
    | : ou
    [4-9]) : fin de l'ensemble de possibilités
    $ : fin de la ligne testée

    Autrement dit : "la ligne finit par un underscore suivi par un nombre de 10 à 99 ou un chiffre de 4 à 9"
    (le "nombre de 10 à 99" pouvant être aussi traduit par "un chiffre de 1 à 9 suivi par un chiffre de 0 à 9")
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  11. #11
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut
    Un grand merci Celira pour ce complément d'information ^^

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    • ! : délimiteur (c'est toi qui l'a choisi et c'est un symbole assez inhabituel)
    • _ : on cherche le caractère littéral underscore
      • () : on crée un groupe de recherche, dans ce groupe, on cherche :
      • ?: : ce groupe sera non capturant, comme on a pas besoin du pattern qui y est définit, ça améliore les perfs de ne pas le capturer, puis soit :
        • [1-9] : un caractère dans la classe allant du caractère 1 au caractère 9, le tiret permet d'indiquer une plage, donc tout ce qui est entre 1 et 9
        • \d : suivi d'un chiffre quelconque
      • | : soit :
        • [4-9] : un caractère dans la classe allant de 4 à 9
      • les deux choix précédents permettent de lister les nombres de 4 à 99
    • $ : fin de la chaine ; on veut que la correspondance se fasse uniquement sur les derniers caractères de la chaine testée
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Cel a été plus rapide que moi !

    Citation Envoyé par Celira
    (?! : un ensemble de possibilités (je ne rappelle le nom exact)
    Moi, j'avais mis (?: qui signifie : on ne capture pas ce groupe.
    Néanmoins, (?! existe et correspond à un lookahead négatif : qui signifie "ne doit pas être suivi de", par exemple \d(?!\d) signifie "un chiffre non suivi d'un autre chiffre" : à l'inverse, (?= signifie "doit être suivi de", par exemple \d(?=\d) signifie "un chiffre obligatoirement suivi d'un autre chiffre".
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  14. #14
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Moi, j'avais mis (?: qui signifie : on ne capture pas ce groupe.
    Oups ! faute de frappe
    Bon, à ma décharge, 1) c'est la touche d'à côté sur le clavier et 2) j'utilise plus souvent des négations que des non-capturants.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

Discussions similaires

  1. Besoin d'aide sur une regex
    Par El_touristo dans le forum Langage
    Réponses: 3
    Dernier message: 19/11/2010, 18h32
  2. besoin d'aide sur une requette sql
    Par maxidoove dans le forum Langage SQL
    Réponses: 13
    Dernier message: 10/10/2005, 18h42
  3. Besoin d'aide sur une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/08/2005, 17h40
  4. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  5. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29

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