Benjamin
12 déc. 2011 à 16:20
Une petite fonction qui permet de formater un numéro de téléphone français (à 10 chiffres).
<?php
function formatFrenchPhoneNumber($phoneNumber, $international = false){
//Supprimer tous les caractères qui ne sont pas des chiffres
$phoneNumber = preg_replace('/[^0-9]+/', '', $phoneNumber);
//Garder les 9 derniers chiffres
$phoneNumber = substr($phoneNumber, -9);
//On ajoute +33 si la variable $international vaut true et 0 dans tous les autres cas
$motif = $international ? '+33 (\1) \2 \3 \4 \5' : '0\1 \2 \3 \4 \5';
$phoneNumber = preg_replace('/(\d{1})(\d{2})(\d{2})(\d{2})(\d{2})/', $motif, $phoneNumber);
return $phoneNumber;
}
$tel1 = "0144035000";
$tel2 = "01.44.03.50.00";
$tel3 = "01-44-03-50-00";
$tel4 = "Voici mon numéro : 01-44-03-50-00";
echo formatFrenchPhoneNumber($tel1); // affiche "01 44 03 50 00"
echo formatFrenchPhoneNumber($tel2); // affiche "01 44 03 50 00"
echo formatFrenchPhoneNumber($tel3); // affiche "01 44 03 50 00"
echo formatFrenchPhoneNumber($tel4); // affiche "01 44 03 50 00"
echo formatFrenchPhoneNumber($tel1, true); // affiche "+33 (1) 44 03 50 00"
echo formatFrenchPhoneNumber($tel2, true); // affiche "+33 (1) 44 03 50 00"
echo formatFrenchPhoneNumber($tel3, true); // affiche "+33 (1) 44 03 50 00"
echo formatFrenchPhoneNumber($tel4, true); // affiche "+33 (1) 44 03 50 00"
?>
if(preg_match(''[0-9]{10}'',$nb_value)){
$nb_valid++;
}else{
$nb_invalid++;
}
m'incrémente $nb_valid au lieu de l'autre, alors que ca taille est de 13 et non 10.
Ceci m'amène à la question : a-t-il testé seulement les 10 premiers digits, ou {10} veut-il dire "au moins 10" et non "exactement 10" ?
Plus ennuyeux : exactement les memes résultats en utilisant :
preg_match(''[0-9]{10,13}'',$nb_value))
- une lettre puis au moins 10 chiffres
- au moins 10 chiffres puis une lettre
- une lettre suivi d'au moins 10 chiffres suivi d'une lettre suivie de 1789 chiffres.
- etc.
Donc il fallait vérifier que la chaine commençait ET finissait obligatoirement par des chiffres ET re-spécifier sa taille, ce qui donne :
if(preg_match(''^[0-9]{9,13}[0-9]$'', $nb_value)){ $nb_valid++; }else{ $nb_invalid++; }et là, on a bien un chaine commençant obligatoirement par 9 à 13 chiffres (^[0-9]{9,13}), suivie d'un dernier chiffre ([0-9]$), sous entendu : une chaine composée obligatoirement de 10 à 14 chiffres...