Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2012, 18h18   #1
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 213
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

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

Informations forums :
Inscription : mai 2011
Messages : 213
Points : 319
Points : 319
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...
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 20h31   #2
Membre confirmé
 
Homme Clément
Développeur informatique
Inscription : décembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 213
Points : 277
Points : 277
Salut !

Voilà un bout de code qui marche avec tous tes exemples, sauf un.
Code :
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));
}
Climoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h04.


 
 
 
 
Partenaires

Hébergement Web