par
Ripat » 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é!
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.
[quote="Truc"]Salut,
Je suis pas un spécialiste de regex mais ceci devrait fonctionner :
[php]$format_tel = "#^(\d{2}[ \.]){4}\d{2}$#"; [/php]
[/quote]
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}[ .][color=red]?[/color]){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 [b]^ \ ] -[/b]. Et encore, si les deux derniers sont situés juste derrière les crochets de la classe, ça passe:[b] [[color=red][[/color]abcd][/b] et [b][abcd[color=red][[/color]][/b] sont tous deux valides et équivalent à [b][ab[color=red]\[[/color]cd][/b]
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.