Comment vérifier un numéro de téléphone portable en HTML5 et PHP ?
Dans le cadre d'un formulaire HTML, comment fait-on pour vérifier la bonne forme d'un numéro de téléphone portable, coté Client et Serveur, avec JS et PHP ?
On peut vérifier la bonne forme d'un numéro de téléphone portable avec une expression régulière, une REGEX :
- En HTML5 avec l'élément PATTERN d'un formulaire, coté client.
- Coté serveur avec PHP.
Vous n'avez pas forcement besoin de JavaScript.
Un utilisateur qui saisit un numéro de téléphone pourrait le faire de différentes manières : avec ou sans espace entre les chiffres, avec un séparateur comme un "-" ou un ".".
06 01 02 03 04 0601020304 06-01-02-03-04 06.01.02.03.04
Voici le PATTERN correspondant à ces exemples :
pattern="0[1-68]([-. ]?[0-9]{2}){4}"
Exemple de formulaire HTML5 :
<form id="monFormulaire" method="post" action="#" role="form">
<input type="text" value=""
required="required" aria-required="true"
pattern="0[1-68]([-. ]?[0-9]{2}){4}"
title="Votre numéro de téléphone portable"
spellcheck="false">
<input type="submit" value="Envoyer">
</form>
Script PHP pour vérifier le numéro de téléphone coté serveur :
$telephone = "06.01-02.03 04";
if (preg_match("#^0[1-68]([-. ]?[0-9]{2}){4}$#", $telephone))
{
$meta_carac = array("-", ".", " ");
$telephone = str_replace($meta_carac, "", $telephone);
$telephone = chunk_split($telephone, 2, "\r");
echo $telephone;
}
else
echo "$telephone n'est pas un numéro valide";
Le résultat sera : 06 01 02 03 04
- preg_match vérifie que la variable $telephone respecte la REGEX
- str_replace enlève les caractères - et . ainsi que les espaces.
- chunk_split remet en forme le numéro de téléphone en ajoutant un espace tous les deux caractères.
Si vous voulez gérer les numéros à l’international, vous pouvez utiliser cette autre REGEX :
pattern="^(?:0|\(?\+33\)?\s?|0033\s?)[1-79](?:[\.\-\s]?\d\d){4}$"
http://html5pattern.com/Phones