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 :

détection Zip Code [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut détection Zip Code
    Bonjour a tous,

    je dois extraire des codes postaux d'un champ comportant la ville et le code postale. Evidemment, j'ai des codes postaux etrangers dans la liste (s'eut été trop simple sinon :p).

    L'expression régulière ci dessous n'est pas trop mauvaise si ce n'est pour certains cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [a-zA-Z]*-?[0-9]+(?!ORLY|ENTZHEIM|SAINT)[a-zA-Z]*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cas foireux:
    94577ORLY CEDEX  => 9457 au lieu de 94577
    67960ENTZHEIM => 6796 au lieu de 67960
    Comme on peut le voir, il me manque systematiquement le dernier chiffre.

    Il ne m'est malheureusement pas possible de changer juste les valeurs génantes à la source puisque je crée un script automatisé qui va scanner un très grand nombre d'adresse (plusieurs centaines).

    Ci dessous quelques exemples parlants de champs a traiter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <VILLE>D-22453 Hamburg</VILLE>    =>    attendu : D-22453
    <VILLE>65451 Kelsterbach</VILLE>    =>    attendu : 65451 
    <VILLE>94577ORLY CEDEX</VILLE>    =>    attendu : 94577
    <VILLE>London SE12XZ</VILLE>    =>    attendu : SE12XZ

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Bonjour,

    Je n'y connais pas grand chose en code postaux internationaux, mais il me semble nécessaire de découper ta regex pour les différents cas possibles.

    Ceci pourrait être un début de piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $reg = '#<VILLE>
    (?:\w+\s)?
    (
    	(\d{5})
    	|
    	([A-Z]-\d{5})
    	|
    	([A-Z]{2}\d\d[A-Z]{2})
    )
    .*
    </VILLE>#x';
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut
    merci pour la réactivité.

    je viens d'essayer ton expression regulière et elle ne fonctionne pas. J'avoue ne pas tout comprendre dans tes notations.

    Je test mes expressions régulières avec l'outil en ligne suivant:

    http://regexpal.com/


    Ce que je ne comprend pas vraiment, c'est la raison pour laquelle le dernier chiffre n'est pas prit dans le cas "orly".

    De plus, mon cas est spécial. Les chaines sont entrées complètement a l'arrache et c'est pour ca que j'aimerais reséparer tout ce bazard...

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ce serait mieux de tester sur ton serveur, tu serais ainsi sûr que cela est compatible avec ton installation. De plus, je ne suis pas sûr que les outils de test en ligne prennent bien en compte toutes les subtilités, comme le paramètre x fourni.

    Pourrais-tu tester ceci sur ton serveur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
     
    $reg = '#<VILLE>
    (?:\w+\s)?
    (
    	(\d{5})
    	|
    	([A-Z]-\d{5})
    	|
    	([A-Z]{2}\d\d[A-Z]{2})
    )
    .*
    </VILLE>#x';
     
    $str = '<VILLE>D-22453 Hamburg</VILLE>    =>    attendu : D-22453';
    preg_match($reg, $str, $m);
    var_dump($m[1]);
     
    $str = '<VILLE>65451 Kelsterbach</VILLE>    =>    attendu : 65451';
    preg_match($reg, $str, $m);
    var_dump($m[1]);
     
    $str = '<VILLE>94577ORLY CEDEX</VILLE>    =>    attendu : 94577';
    preg_match($reg, $str, $m);
    var_dump($m[1]);
     
    $str = '<VILLE>London SE12XZ</VILLE>    =>    attendu : SE12XZ';
    preg_match($reg, $str, $m);
    var_dump($m[1]);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 208
    Points : 82
    Points
    82
    Par défaut
    J'ai testé dans mon application (qui est en java, cela change t'il qq chose? pour moi, les expressions régulières étaient un standard) et ca ne fonctionne pas.

    :/


    [EDIT] : C'est bon, j'ai trouvé. pour ceux que ca interesse voici la réponse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [a-zA-Z]*-?[0-9]+([a-zA-Z](?!RLY|NTZHEIM|AINT))*
    C'était donc une incompréhension de ma part sur le fonctionnement de (?!

    Merci pour l'aide

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Java et PHP utilise les mêmes regex, mais la façon de les appeler et les modificateurs de ces expressions peuvent être différents...

    Il eut été utile de préciser...
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

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

Discussions similaires

  1. [XL-2010] Détection de code dans un classeur
    Par ChChatou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/09/2013, 23h06
  2. Détection de code barre sur fichier PDF
    Par Minimius dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 15/02/2012, 14h15
  3. Outils de détection de code mort
    Par maloups dans le forum JSF
    Réponses: 7
    Dernier message: 18/09/2007, 17h23
  4. Détection de code mort
    Par maloups dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 18/09/2007, 17h18
  5. ZIP code et miles
    Par wiggy dans le forum Langage
    Réponses: 6
    Dernier message: 18/09/2007, 12h17

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