Php modifier chaine de caractères

Résolu/Fermé
Isa__ Messages postés 55 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 14 octobre 2011 - 3 juil. 2009 à 07:59
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 6 juil. 2009 à 11:41
Bonjour à tous,

J'ai dans ma base des numéros de téléphone sous la forme 607435674
Je voudrais les faire afficher plus proprement, sous forme 06 07 43 56 74.
J'ai essayé des tas de trucs compliqués et pas efficaces.
Je pense que la solution serait dans un ereg, mais ne n'arrive pas à m'en sortir.
Je suis sûre que la solution est pourtant simple et que l'un de vous pourra m'aider.

Merci d'avance

Isa

5 réponses

Bonjour

Je ne vois pas très bien ce que les ereg viennet faire là-dedans. les ereg, c'est plutôt pour vérifier si une chaîne respecte un certain format.
Tu as juste à découper ton numéro en petits morceaux avec des ciseaux "substr" et à recoller les morceaux en mettant des espaces :

$nouveaunumero = substr($numero,0,2).' '.substr($numero,2,2).' '.substr($numero,4,2).' '.substr($numero,6,2).' '.substr($numero,8,2);
2
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 856
3 juil. 2009 à 11:31
Bonjour,

Ou une fonction plus généraliste, qui prends en paramètre une chaine de caractère, et qui insère un espace tous les 2 caractères :


function formatPhoneNumber ( $number ){

	$ancien = $i = strlen($number );
	$newNumber = "";
	
	do{
		$ancien = $i;	// --- Save start position
		$i -= 2;	        // --- New position
		if ( $i >= 0 )
			$newNumber = " ".substr($number ,$i,3).$newNumber ;
		else if ( $ancien >= 0 )
			$newNumber = substr($number ,0,$ancien).$newNumber ;
	}while( $i >= 0 );

	return $newNumber ;
}


A toi ensuite de contrôler la taille de ton numéro de téléphone pour ne pas te retrouver avec un seul premier chiffre par exemple (ex: 675654889 -> 6 75 65 48 89)

Mais sinon il me semble aussi que tu puisse faire ça via des expressions régulières. Celle-ci te permette de récupérer un groupe de caractère dans une chaine, afin de les reformater dans une chaine en sortie. Donc rien ne t'empêche de "grouper" deux caractères par deux caractères et de les concaténer avec un espace en sortie. N'étant pas spécialiste des rexexp par contre, je n'ai pas de code à te proposer, mais google est ton ami ;)
1
Isa__ Messages postés 55 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 14 octobre 2011 2
3 juil. 2009 à 17:23
Merci beaucoup à tous les deux...
Avec ça je devrais pouvoir me débrouiller.
Je poste résultat ici ensuite si ça peut aider quelqu'un.

isa
0
Isa__ Messages postés 55 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 14 octobre 2011 2
3 juil. 2009 à 18:27
J'ai eu la flemme de chercher avec ereg.
J'ai testé la solution de le père.
Après modif puisque je n'avais pas de 0 en début de numéro, j'a fait ça :

$nouveau_no = "0".substr($ancien_no,0,1).' '.substr($ancien_no,1,2).' '.substr($ancien_no,3,2).' '.substr($ancien_no,5,2).' '.substr($ancien_no,7,2);

Et ca fonctionne parfaitement, donc en bonne feignasse, je ne cherche pas plus loin !

Merci à vous tous

Isa
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 856
6 juil. 2009 à 11:41
Il faudra faire attention cependant. Avec un tel code, certes ça fonctionne, mais si tes valeurs, ou plutôt la forme de tes valeurs change plus tard (admettons que tu ne gère plus que des nombres à 3 chiffres), ça risque d'entrainer des erreurs d'indexation.
0