Vous êtes sur la page Blog

Comment formater un numéro de téléphone et insérer des espaces dans une chaine de caractère avec PHP

Rédigé par fab1 aucun commentaire

C'est un problème qui peut se poser sur vos chaines de caractères un peu particulières et qui nécessitent un petit traitement comme un numéro de téléphone non formaté pour l'affichage. Nous allons voir comment cela est facile à résoudre à l'aide de la fonction wordwrap(). Prenons par exemple le cas d'un numéro de téléphone français qui serait stocké de la manière suivante dans votre base de données MySQL par exemple : "0102030405".

La problématique est alors la suivante : vous voulez que l'affichage des numéros de téléphones soit clair pour vos utilisateurs et faire malgré tout des économies de mémoire sur votre serveur de base de données qui stocke un grand nombre de numéros de téléphone en ne sauvegardant pas les numéros avec leurs espaces qui sont présents tout les deux caractères. On fait des économies d'espace mémoire mais c'est pas très joli.

Comme d'habitude en programmation il existe un grand nombre de solutions possibles pour un problème donné. La première fois que j'ai cherché à résoudre ce problème, je suis passé sur de très nombreux forum avec différentes techniques. Si j'écris cet article, c'est pour aider ceux qui tomberont ici et éviter qu'ils cherchent longtemps la solution à ce problème d'espace tout les x caractères dans une chaine.

J'ai d'abord vu les bourrins qui proposaient de faire un for avec du strlen et du substr, ce que revient à 5/6 lignes de codes avec la présence d'itération. En gros je compte deux caractères, j'ajoute un espace et ainsi de suite. Bof, pas terrible de faire des boucles pour un truc aussi simple ...

Ensuite je suis tombé sur les amoureux des d'expressions régulières qui proposaient différentes solutions plus ou moins simples selon la qualité de l’expression régulière concoctée. Attention je ne dis pas que ce n'est pas la bonne solution, mais si vous avez bien suivi le contexte, je trouve ça encore un poil trop lourd pour ce que je cherche à faire. J'aime le simple en programmation, je veux des KISS partout moi :p Bon je ne suis pas totalement réfractaire à ce genre de solution et voici un petit exemple qui fonctionne si on souhaite ajouter un espace tout les deux caractères ce qui correspond à notre besoin concernant le numéro de téléphone non formaté :

<?php 

$string = '0102030405';
echo preg_replace('#(\d{2})#', '$1 ', $string);

?>

Mais ce n'est pas encore parfait à mon gout car ce n'est pas assez simple. C'est à ce moment que j'ai découvert la fonction wordwrap() et franchement, pour le besoin de formater un numéro de téléphone que nous avons, il va être difficile de faire plus simple et surtout clair à comprendre. Cette fonction wordwrap s'utilise alors de la manière suivante sur notre numéro de téléphone français :

<?php

$string = '0102030405';
echo wordwrap($string,2, " ",1);

?>

Je vous laisse consulter la documentation officielle de PHP pour plus d'informations sur cette fonction wordwrap qui peut donc s’avérer très pratique.

Classé dans : Tutoriel PHP

Écrire un commentaire