2010-10-06 14 views
1

Je cherche un moyen de déterminer si un numéro de téléphone est au format international ou un format local, et si c'est au format international quel pays il appartient. Si c'est dans le format local, il doit inviter l'utilisateur pour le code du pays et ensuite le convertir en format international.Déterminer des informations sur un numéro de téléphone et reformater en PHP

Exemples:

  • 00447749123123 = Numéro international du Royaume-Uni - reformater 447749123123

  • +447749123123 = Numéro international du Royaume-Uni - reformater 447749123123

  • 447749123123 = Numéro international du Royaume-Uni

  • 07749123123 = numéro national du Royaume-Uni - invite pour le pays c ode et reformater 447749123123

  • 18775784000 = numéro américain international

  • 8775784000 = numéro national américain - rapide pour le code pays et reformater 18775784000

Est-ce que quelqu'un sait s'il existe un tel script, ou sinon comment faire cela? L'informatique devrait fonctionner pour autant de pays que possible (pas seulement le Royaume-Uni et les États-Unis).

+0

Il n'y a aucun moyen de déterminer si le numéro est un numéro national américain ou britannique. Les autres reformatages peuvent être faits cependant. – halfdan

Répondre

1

Je ne pense pas qu'un tel script ou service web existe, j'ai fait des recherches sur quelque chose de similaire il y a quelques semaines. Comme plusieurs pays ont des numéros de téléphone de longueur différente, je pense que vous aurez du mal à créer un script qui fonctionne pour tous les pays avec toutes les différentes façons d'écrire un numéro de téléphone.

Vous devez émettre des hypothèses sur le numéro de téléphone donné en entrée. Fondamentalement, vous avez deux approches différentes.

  1. Faire une solution rigide qui fonctionne uniquement avec le numéro de téléphone connu domestique formats
  2. Faire une solution flexible qui accepte uniquement les formats internationaux facilement identifiables, mais en conséquence, accepte tout format domestique.

Je voudrais opter pour l'option numéro deux.

Dans vos exemples, les numéros 1 et 2 sont facilement identifiables en tant que numéros internationaux. Le numéro 3 est difficile à identifier, car il peut s'agir d'un numéro international britannique ou un pays inconnu avec des numéros de téléphone domestiques à 12 chiffres. Donc, je commencerais par accepter l'option un et deux comme numéros internationaux valides et passer le numéro trois.

<?php 
$number = "00447749123123"; // remember the quotes the number must 
          // keep leading zeros. 

if (preg_match('/^(00|\+)/', $number)) { 
    echo "International number"; 
    // parse and recognize country code. 
} else { 
    echo "national number"; 
    // identify which country 
} 

L'identification des numéros de téléphone nationaux sans savoir quel pays il est à l'avance est impossible, car de nombreux pays partagent les mêmes formats. Demander aux utilisateurs de choisir leur pays dans un formulaire Web est donc nécessaire pour ajouter le code international aux numéros.

1

Il n'y a rien de gratuit mais Neustar serait votre service le mieux payé. Je pense qu'ils offrent également des services de numéros internationaux, mais vous devrez peut-être coder votre propre interface API. Une autre route payée pourrait être Twilio, mais je ne suis pas sûr de leurs options internationales. Je sais que certains agrégateurs SMS plus volumineux pourraient offrir cela pour leurs produits, mais pas en tant qu'API/service autonome. Si vous cherchez une option payante, vous pouvez essayer OpenMarket (MxTelecom pour international). Juste une pensée