Découper une adresse physique grâce aux expressions régulières en PHP

Rédacté le 16/07/2010 WebDev

Tags: ,

Récemment, j’ai du découper une bonne liste d’adresses formatées ainsi :
12 bis rue du 18 Mai 1945, 78000 Versailles
(je ne sais même pas si cette adresses existe, c’est un exemple..)

Je souhaitais obtenir les informations suivantes :

  • N° dans la voie + éventuellement la mention bis ou ter
  • Nom de la voie
  • Code Postal
  • Ville

Au lieu de passer à la main sur la liste, j’ai codé un petit bout de PHP pour le faire à ma place :)
Pour cela, je me suis servi des expressions régulières grâce à la fonction preg_match();

Le code PHP :

preg_match('/^([\d\/-]+?[\h]?(bis|ter)?)[\h]*([\D]{3}.*),[\h]*([\d]{5})[\h]*(.*)$/i', $adresse, $aMatch);
$numero = $aMatch[1];
$voie = $aMatch[3];
$code_postal = $aMatch[4];
$ville = $aMatch[5];

Analyse :

Analysons cette (magnifique, avouons-le) expression régulière :

^([\d\/-]*[\h]?(bis|ter)?)[\h]*([\D]{3}.*),[\h]*([\d]{5})[\h]*(.*)$

Dans l’ordre :

  • ^ : début du texte à analyser
  • ([\d\/-]*[\h]?(bis|ter)?) : capture d’une série de chiffres (pouvant comprendre un -, genre 5-7 rue ….) suivi ou non d’un espace puis de la mention « bis » ou « ter » (ou pas)
  • [\h]* : aucun, un ou plusieurs espaces
  • ([\D]{3}.*) : 3 caractères qui ne sont pas numériques, suivi (ou non) de divers caractères (le nom de la voie)
  • , : la virgule qui sépare le nom de la voie du code postal
  • [\h]* : encore aucun, un ou plusieurs espaces
  • ([\d]{5}) : 5 caractères numériques (le code postal)
  • [\h]* : encore aucun, un ou plusieurs espaces
  • (.*) : une série de n’importe quel caractère (le nom de la ville)
  • $ : fin du texte à analyser

J’ai utilisé le modificateur « i » en fin d’expression régulière pour que le traitement soit insensible à la case uniquement pour « bis » et « ter »).

Cette expression fonctionne sur ces adresses :

  • 12 bis rue du 18 Mai 1945, 78000 Versailles
  • 5-7 avenue de Paris, 84000 Avignon
  • Place d’Arme, 75001 Paris
  • Certainement d’autres…

Si j’ai omis quoi que ce soit, ou que l’expression ne fonctionne pas sur certaines adresses, n’hésitez pas à me le signaler dans les commentaires, je ferai évoluer ce bout de code :)

2 commentaires to Découper une adresse physique grâce aux expressions régulières en PHP

    • Loïc dit :

      Effectivement ;)
      J’imagine que c’est même bien plus fiable que ma solution, et valable pour l’international ^^

  • Leave a Reply

    Notifiez-moi des commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.

    Bienvenue sur mon blog.
    Il s'agit avant tout d'une zone de veille pour moi, un lieu où je stocke les astuces qui me serviront à nouveau plus tard.
    Au menu, du PHP, javascript, un peu de CSS et des astuces diverses...