Nettoyer et afficher un numéro de téléphone en PHP
Voici une fonction assez simplement permettant dans un premier temps de vérifier un numéro de téléphone (après avoir retiré tous les caractères non alphanumériques) puis de formater un affichage.
Vous pouvez l'utiliser avant d'entrer le numéro dans la base de données (après le traitement par formulaire) ou par exemple afficher le numéro sur votre site sous la forme "00-00-00-00-00". (Séparateur modifiable)
En paramètres de la fonction le numéro de téléphone et optionnel le séparateur qui sera affiché tous les deux caractères numériques.
<?php # Nettoyage/affichage d'un numéro de téléphone function clean_display_phone($nbr, $sep=false) { $nbr = ereg_replace('[^0-9]', '', $nbr); if(strlen($nbr) != 10) return false; else { if($sep) { for($i=0;$i<5;$i++) $nbr_array[] = substr($nbr, $i*2, 2); $nbr = implode($sep, $nbr_array); return $nbr; } else return $nbr; } }
Voici quelques exemples d'utilisation.
<?php // Numéros de téléphone suite à un formulaire par exemple $num_tel_bon = '10.45.86.12.34'; $num_tel_mauvais = '084230246875123'; # Test Validité if(clean_display_phone($num_tel_bon)) // Affiche "Ok" echo 'Ok'; if(clean_display_phone($num_tel_mauvais)) // Pas de retour echo 'Ok'; # Affichage echo clean_display_phone($num_tel_bon); // Affiche "1045861234" echo clean_display_phone($num_tel_bon, '-'); // Affiche "10-45-86-12-34"
N'hésitez pas à me faire un retour ou encore me proposer des améliorations.
Cette fonction marche bien pour les numéros français, mais pour les numéros internationaux avec le suffixe, elle ne fonctionne plus ...
exemple : +33(0)3.44.55.66.77
En effet mais le soucis c'est que le format peux être de différentes formes :
- Avec ou sans le zéro
- Avec ou sans les parenthèses
- ...
Bonjour,
Je m'en suis servie pour nettoyer une vielle base de données ou les internautes avaient rentrées des valeurs comme :
Tél. & Fax : 04.70.00.00.00
Et ça m'a tout cleaner super proprement !
Je suis épatée.
Vraiment merci merci beaucoup.
Je vais la garder précieusement !!!
Au plaisirs d'avoir aidé. Il faudrait améliorer cette fonction pour prendre en charge les numéros internationaux. Peut-être un prochain billet.
A quand le prochain billet pour l'internationale ?
C'est pas une mauvaise idée, j'ai déjà pas mal regardé pour un projet mais c'est plus que compliqué.
Je vais pas avoir le choix de l'aborder d'ici quelques semaines, si j'arrive à trouver quelque chose qui fonctionne pour tous les pays je n'hésiterais pas à mettre à jour le billet ou en créer un nouveau
Bonjour,
J'ai déjà travaillé dans une autre techno sur la création d'un annuaire international d'une grande entreprise. En fait il faut connaitre la provenance du numéro de téléphone. En fait pour chaque pays il faut créer un document de paramétrage avec le code Iso et le formatage du téléphone.
Par exemple pour la france : FR => +33 #.##.##.##.##
Pour la Suisse : CH => +41 ## ### ## ##
Le traitement du numéro se fait en partant de la droite du téléphone puis on respecte le format en allant vers la gauche.
Ainsi pour le téléphone 01 23 45 67 89, nous aurons :
+ 33 1 23 45 67 89
Bonsoir,
J'avais déjà lu quelques points sur le forum de developpez.com à ce sujet, du coup sur un site ou l'on ne demande pas le pays, aucun moyen de vérifier convenablement le format du numéro. Comme je l'ai déjà annoncé, je vais prochainement devoir me pencher sur le problème, je détaillerais donc ma solution (si j'y parvient !)