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 :

Extraction d'une boite postale


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Par défaut Extraction d'une boite postale
    J'aimerais extraire des boites postales dans une variable.
    Une boite postale est composée de BP séparé ou pas par un point ou un espace
    suivi d'un point ou d'un espace ou rien du tout suivi de 5 chiffres au plus.
    Avec la contrainte de ne pas prendre les chiffres d'un code postal pouvant suivre immédiatement

    Par exemple

    BP 100 -> BP100
    B P 1 0 0 -> BP100
    B.P.100CAEN -> BP100
    PARISBP70 PARIS->BP70
    LYONBP69 000 -> BP69000
    BP232 06900 PARIS ->BP232
    BP232 06 900 PARIS -> BP232
    B.P.23 200 75 200 ->BP23200
    B.P.23 06 800 ->BP23
    BP 23 800 900 ->BP23800
    BP 452 568 ->BP452
    BP12 45 8002 ->BP1245

    Un code postal étant une série de 4 chiffres consécutif isolée 6320 par exemple
    ou de 5 chiffres isolés éventuellement de la forme 2+3 : 75200 ou 75 200

    Je cale...

  2. #2
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Par défaut
    Salut !

    Voilà un bout de code qui marche avec tous tes exemples, sauf un.
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    // Expression rationnelle qui permet de récupérer le code postal à partir d'une chaine de caractère
    define('CP_PATTERN_RECOGNITION', "#B[ .]*P[ .]*([0-9 ]*)#");
     
    /**
     * Extrait le code postal à partir d'une chaine de caractère.
     * @param string $cp le code postal brut
     */
    function extractCP($cp) {
    	$result = preg_match(CP_PATTERN_RECOGNITION, $cp, $matches);
    	// Si c'est bien reconnu comme un code postal
    	if ($result > 0) {
    	    // On récupère la première expression entre parenthèse, celle qui contient les nombres
    		$numbersAndSpace = $matches[1];
    		$length = strlen($numbersAndSpace);
    		$i = 0;
    		$cpnumbers = ""; // Cette variable va contenir les nombres du code postal
     
    		/*A toi d'adapter un peu ce qui suit, parce que c'est de la bidouille 
    		 (pas bien pigé les vraies règles)*/
     
    		// On récupère tous les nombres que l'on trouve, mais maximum trois.
    		while ($i < $length && (strlen($cpnumbers) < 3)) {
    			if (ctype_digit($numbersAndSpace[$i])) {
    				$cpnumbers .= $numbersAndSpace[$i];
    			}
     
    			$i++;
    		}
     
    		// On récupère encore les nombres qui restent, mais on s'arrêtent dès qu'on tombe sur un espace.
    		while ($i < $length && $numbersAndSpace[$i] != ' ') {
    			$cpnumbers .= $numbersAndSpace[$i];
    			$i++;
    		}
     
    		// Résultat final
    		return "BP" . $cpnumbers;
    	}
    	else {
    		// Pas un CP
    		return "";	
    	}
    }
     
    $test_cp_list = array(
    	'BP 100',
    	'B P 1 0 0',
    	'B.P.100CAEN',
    	'PARISBP70 PARIS',
    	'LYONBP69 000',
    	'BP232 06900 PARIS',
    	'BP232 06 900 PARIS',
    	'B.P.23 200 75 200',
    	'B.P.23 06 800',
    	'BP 23 800 900',
    	'BP 452 568',
    	'BP12 45 8002'
    );
     
     
     
    foreach($test_cp_list as $cp) {
    	var_dump( $cp . " => " . extractCP($cp));
    }

Discussions similaires

  1. [XL-2010] Extraction d'une partie d'une adresse postale
    Par alain.terieur12 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 04/12/2014, 17h14
  2. Réponses: 4
    Dernier message: 21/12/2012, 21h46
  3. [BPW]Problème de recherche dans une boîte liste
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 05/07/2003, 15h10
  4. Réponses: 5
    Dernier message: 04/04/2003, 15h02
  5. Comment cree une boite de dialogue parcourir
    Par kenshi dans le forum MFC
    Réponses: 5
    Dernier message: 06/01/2003, 10h30

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