Menu

Vérification numéro de téléphone - Form PHP [Résolu/Fermé]

Messages postés
401
Date d'inscription
vendredi 29 juin 2007
Statut
Membre
Dernière intervention
23 mars 2013
- - Dernière réponse :  Azote22 - 12 oct. 2012 à 00:01
Bonjour,
Comment vérifier qu'un champ est numérique et qu'il fait exactement 10 chiffres (pour un numéro de téléphone) en PHP SVP ?
Merci
a+
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
2898
Date d'inscription
dimanche 30 juillet 2006
Statut
Modérateur
Dernière intervention
5 juin 2018
769
17
Merci
Salut !
if(preg_match('`[0-9]{10}`',$numero_de_telephone));echo "C'est bon";

http://php.net/preg_match
--
Sylvain

Dire « Merci » 17

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 39098 internautes nous ont dit merci ce mois-ci

Info déconcertante : avec le numéro '0032486756537',

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" ?
Elements de réponse : il semblerait que cela ne teste QUE les 10 premiers digits, car il incrémente $nb_valid également avec '0032486756A37' (lettre en 11eme position) alors qu'avec '00324867A6537' (lettre en 9eme position) il incrémente bien $nb_invalid.

Plus ennuyeux : exactement les memes résultats en utilisant :
preg_match(''[0-9]{10,13}'',$nb_value))
Réponse finale : en fait c'est dû au fait que formulé ainsi, il se contente de valider "une suite de 10 (ou de 10 à 13 selon la version) caractères numériques", sous entendu : sont valides les suites suivantes :
- 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...
Simplement deux teste :
preg_match("regex", $string); : Cette fonction php permet de vérifier grâce au REGEX la correspondance avec la chaine de caractére $string.

La traduction du REGEX expliqué par Poulpos :

-'cela ne teste QUE les 10 premiers digits' [qui doivent être des chiffres compris entre 0 et 9]

Ensuite tout simplement la fonction :
strlen($string); : Retourne le nombre de caractère dans la chaine de caractère ( espace compris).

voilà donc ta condition écrite :

if( preg_match(''[0-9]{10}'',$nb_value) && strlen($nb_value) == 10){

$nb_valid++;

}else{

$nb_invalid++;

}

Réponse à un topic de 2008 ! en 2012 ! :) J'aime ! (oukilé le pouce ! :p)
Une question, ne vaut'il mieux pas utilisé le '/ plus que '' et qu'elle est la différence?

Comme ceci :
if( preg_match('/[0-9]{10}/',$nb_value) && strlen($nb_value) == 10){
5
Merci
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"
?>
Ceci est la solution la plus efficace !
2
Merci
Et pour avoir un minimum de 8 caractères et un maximum de 12?
Ssylvainsab
Messages postés
2898
Date d'inscription
dimanche 30 juillet 2006
Statut
Modérateur
Dernière intervention
5 juin 2018
769 -
Salut greg !


C'est entre accolades que tu détermines les nombre de caractères requis :
if(preg_match('`[0-9]{10}`',$numero_de_telephone)) echo "C'est bon";

Donc il faut changer {10} en {8,12}

a plus
--
Sylvain
1
Merci
Bonsoir,

Par REGEX vas voir les site: www.siteduzero.com expliquations parfaites pour ton cas.

@lain
Messages postés
401
Date d'inscription
vendredi 29 juin 2007
Statut
Membre
Dernière intervention
23 mars 2013
55
1
Merci
Thank you !
1
Merci
Salut Sylvain

Merci de m'avoir répondu, même si entre temps j'avais finis par deviner le truc en jouant un peu avec.

A plus,

Greg