2 votes

Méthode ultime pour trouver des numéros de téléphone dans une chaîne PHP avec preg_replace

Je travaille sur un projet en ce moment où nous avons une grande quantité de chaînes de texte que nous devons localiser les numéros de téléphone et les rendre cliquables pour les téléphones Android.

Les numéros de téléphone peuvent avoir des formats différents et être précédés ou suivis de textes différents. Existe-t-il un moyen simple de détecter tous les types de formats de numéros de téléphone ? Une bibliothèque qui pourrait être utilisée ?

Les numéros de téléphone peuvent montrer comme, doit travailler avec toutes ces combinaisons. Pour que le résultat soit comme

<a href="tel:number">number</a>

+61 8 9000 7911

+2783 207 5008

+82-2-806-0001

+56 (2) 509 69 00

+44 (0)1625 500125

+1 (305)409 0703

031-704 98 00

+46 31 708 50 60

2voto

drrcknlsn Points 7727

Peut-être quelque chose comme ça :

/(\+\d+)?\s*(\(\d+\))?([\s-]?\d+)+/
  • (\+\d+)? = Un "+" suivi d'un ou plusieurs chiffres (facultatif)
  • \s* = Un nombre quelconque de caractères d'espacement (facultatif)
  • (\(\d+\))? = Un "(" suivi d'un ou plusieurs chiffres suivis de ")". (facultatif)
  • ([\s-]?\d+)+ = Un ou plusieurs ensembles de chiffres, éventuellement précédés d'un espace ou d'un tiret

Pour être honnête, cependant, je doute que vous trouviez une expression unique pour les vaincre tous. Les numéros de téléphone peuvent se présenter sous tellement de formats différents qu'il est probablement impossible de faire correspondre tous les formats possibles sans faux positifs ou négatifs.

1voto

A Person Points 921

Je ne suis pas sûr qu'il existe une bibliothèque pour cela. Hmmmm. Comme tout équipement international, les numéros de téléphone sont normalisés et il devrait y avoir un format définissant les numéros de téléphone également. E.164 suggère des numéros de téléphone recommandés : http://en.wikipedia.org/wiki/E.164 . Toutes les bibliothèques de décodage open-source sont construites à partir de la lecture de ces formats standards, donc cela devrait être utile si vous ne trouvez pas de librairie existante.

0voto

Robin Castlin Points 7646

Je suppose que cela pourrait faire l'affaire pour ces cas ?

preg_replace("/(\+?[\d-\(\)\s]{7,}?\d)/", '<a href="tel:$1">number</a>', $str);

En gros, je vérifie si elle peut démarrer sur le +. Ce n'est pas obligatoire. Ensuite, je vérifie s'il contient des chiffres, des -, des (, ) et des espaces avec au moins 8 cases, afin qu'il ne prenne pas de numéros bas qui ne sont pas des numéros de téléphone.

0voto

shivanshupatel Points 169

Essayez ce qui suit :

preg_match_all('/\+?[0-9][\d-\()-\s+]{5,12}[1-9]/', $text, $matches);

ou :

preg_match_all('/(\+?[\d-\(\)\s]{8,20}[0-9]?\d)/', $text, $matches);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X