Validation numéro de téléphone

Eléphanteau du PHP | 43 Messages

21 oct. 2006, 22:09

Bonsoir,

Voilà, je poursuis dans la mise à jour de formulaires existant, et je souhaiterais ajouter un contrôle sur les numéro de téléphone saisis.

J'ai ajouté un test permettant de vérifier si la zone est numérique et de longueur 10 carctères
  $format_tel = "#^\d{10}$#"; 
if (!(preg_match($format_tel,$tel)))
Cepedant, je souhaiterais pouvoir autoriser ces formes de saisie :
01 01 01 01 01
ou
01.01.01.01.01

Existe t'il une solution ?

Merci
La vie est perdue contre la mort, mais la mémoire gagne dans son combat contre le néant. [ Tzvetan Todorov ]

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

21 oct. 2006, 23:24

Salut,
Je suis pas un spécialiste de regex mais ceci devrait fonctionner :
$format_tel = "#^(\d{2}[ \.]){4}\d{2}$#"; 
un groupe de 4 fois 2 chiffres suivis d'un espace ou d'un point => (\d{2}[ \.]){4}
puis un dernier goupe de 2 chiffres => \d{2}

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 1380 Messages

22 oct. 2006, 06:24

Salut,
Je suis pas un spécialiste de regex mais ceci devrait fonctionner :
$format_tel = "#^(\d{2}[ \.]){4}\d{2}$#"; 
Pas mal pour un non spécialiste auto-déclaré! :wink:

Je rendrais juste la classe de caractères optionnelle pour valider les numéros "pleins".

^(\d{2}[ .]?){4}\d{2}$

En passant, il n'est pas indispensable d'échapper le point dans une classe de caractères. Les seuls caractères spéciaux et méta caractères qui doivent être échappés sont: les ^ \ ] -. Et encore, si les deux derniers sont situés juste derrière les crochets de la classe, ça passe: [[abcd] et [abcd[] sont tous deux valides et équivalent à [ab\[cd]

Sinon, l'alternative classique est de d'abord supprimer tous les caractères indésirables avec un str_replace() et ensuite tester avec un simple is_numeric(). Les avantages de cette deuxième méthode sont qu'elle sera sans doute plus rapide à l'exécution et ensuite, si tu mets le tél. en bdd, tous tes n° seront normalisés.
ripat

Eléphanteau du PHP | 43 Messages

22 oct. 2006, 09:35

Merci à tous les deux !!

Cela fonctionne parfaitement.
Je garde sous le coude, le str_replace() car pour le moment cette info n'est pas stockée en base.

Je cloture la sujet
La vie est perdue contre la mort, mais la mémoire gagne dans son combat contre le néant. [ Tzvetan Todorov ]

anas
Invité n'ayant pas de compte PHPfrance

21 mars 2013, 00:35

$Syntaxe='#^0[5,6]([0-9]{2}){3}$#';

Eléphanteau du PHP | 12 Messages

21 mars 2013, 12:13

tu peux aussi faire en html dans ce genre la :
<label for = "Tel">Telephone : </label><input type = "tel" name = "Tel" id = "Tel" pattern="^[0-9]{10}$"/>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 mars 2013, 01:02

Le sujet n'a que six ans ....
Il en faut peu pour être heureux ......