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 :

Opérateur OU (|) pour code RNE [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Opérateur OU (|) pour code RNE
    Bonjour,

    J'ai créer une regex pour détecter des RNE dans un fichier mais j'ai 2 petits soucis bien gênant. J'expose la situation:

    - un RNE est un numéro d'établissement composé d'un 0 suivi du numéro du département, puis 4 chiffres aléatoires et enfin une lettre majuscule (exemple: 0250234A). dans mon académie, il y a 5 départements, mon regex ressemble donc a ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [0]{1}[44|49|72|53|85]{2}[0-9]{4}[A-Z]{1}
    Premier problème (le plus gênant) : les numéros de département ne sont pas pris en compte. J'ai fait plusieurs test et je me rend compte que lorsque je ne met que 4 départements ça marche sans problème!!! c'est très bizarre non??

    deuxième problème: il peut arrivé que certains numéros ressemblent à des RNE mais avec une suite (exemple: 0140369K123A...). Donc comment faire pour ne pas obtenir de faux positif?

    Évidement, je pourrais ajouter quelques lignes de code pour tester le numéro de département. Mais j'aimerai tout de même comprendre pourquoi cette bizarrerie...
    Merci d'avance pour vos réponses,

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    il faut faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    $pattern = '/^0(44|49|72|53|85)\d{4}[A-Z]$/';
     
    $a = '0440234A';
    $for_a = preg_match($pattern, $a, $matches); // true
     
    $b = '0530369K123A';
    $for_b = preg_match($pattern, $b, $matches); // false
     
    ?>
    Tu as fait plusieurs erreurs dans ton pattern :
    - il n'est pas nécessaire de préciser une cardinalité {1}, la présence du caractère suffit
    - une suite de caractères est délimitée par des () et non des []
    - pour éviter les faux-positifs, il faut indiquer que tu cherches le pattern exact : tu dois marquer le début ^ et la fin $

  3. #3
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Déjà, tu confonds une classe de caractères (par exemple [0-9] qui signifie n'importe quels caractères compris entre 0 et 9) dans laquelle il n'existe pas de notion de OR puisque celle-ci est implicite et un groupe capturant (entre parenthèses).
    Dans ton cas, la partie
    ne veut rien dire
    Ce serait donc plutôt
    Pour l'autre problème, tu peux préciser que tu souhaites commencer la recherche au premier caractère avec le signe ^ au début et finir au dernier caractère avec le signe $.

    Ce qui conduit à l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /^0(44|49|72|53|85)\d{4}[A-Z]$/
    Note aussi que [0] n'a aucun intérêt ni [A-Z]{1}.

    EDIT
    Arf... grillé par rawscr...
    Content quand même de voir qu'on arrive à la même expression !
    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

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Merci
    Moins de 15 minute pour me répondre!!! Chapeau et merci, ca marche nickel...
    à la prochaine

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

Discussions similaires

  1. Conseil pour code de base
    Par Alpha31 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 21h12
  2. opérateurs téléphonique et code
    Par the watcher dans le forum Hardware
    Réponses: 2
    Dernier message: 08/06/2006, 13h29
  3. [VBA] Aide pour code
    Par Virgile59 dans le forum Access
    Réponses: 2
    Dernier message: 22/05/2006, 14h16
  4. Calcul simple pour code couleur
    Par Boumeur dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/04/2005, 10h51
  5. Est ce que ça existe une api java pour code barre ?
    Par miloud dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 14/04/2005, 17h20

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