2010-01-31 5 views
1

J'ai besoin d'un peu d'aide ici. Ce code affiche correctement tous les formats que j'entre - sauf quand il est xxx.xxx.xxxxpreg_replace aide: numéro de téléphone

Il garde les périodes en! Comment filtrer les périodes aussi?

preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "$1-$2-$3", $phone_enter) 

Répondre

4

Vous devez mettre à jour la requête il permettra à un . (point), j'ai ajouté le \.? ce qui signifie qu'un point peut apparaître zéro ou une fois.

preg_replace("/([0-9]{3})\.?([0-9]{3})\.?([0-9]{4})/", "$1-$2-$3", $phone_enter) 
+1

Oui, échappez aux points et gardez-les à l'extérieur des groupes. Je voudrais upvote mais j'ai déjà atteint ma limite ... –

+0

il y a une limite de vote par jour? – Amirshk

+1

Oui, il y a un badge pour le frapper, je pense. –

4

Je fais ceci:

preg_replace('/(\d{3})([.-])?(\d{3})\2(\d{4})/', '$1-$3-$4', $phone_number); 

\d est un raccourci pour [0-9]. L'utilisation de la référence arrière signifie que vous pouvez entrer "123.456.7890" ou "123.456.7890" mais pas "123.4567890" ou "123.456-7890".

Gardez également à l'esprit que les autres pays ont différents formats de numéros de téléphone, si cela est pertinent pour ce que vous faites.

+0

@cletus, le _ \ 2_ signifie-t-il encore le deuxième groupe? – Amirshk

+1

@Am: oui, c'est la référence arrière. Voir http://www.regular-expressions.info/brackets.html – cletus