2011-10-10 7 views
1

Je pense que je suis confronté à un paradoxe ici.Traiter les formats de numéros de téléphone

Ce que je suis en train de faire est quand je reçois/faire un appel, je le numéro, donc je dois savoir si son un numéro international, si son un numéro local, etc.

Le problème est:

  1. pour moi de savoir si un nombre est international, je dois analyser et vérifier sa longueur, mais la longueur diffère d'un pays à, donc, dois-je faire une méthode qui analyse et reconnaît pour chaque pays? (Non fonctionnel à mon avis); Pour moi de savoir si c'est un numéro local, j'ai besoin de l'indicatif régional, donc je dois faire la même chose, analyser le nombre et vérifier la longueur, obtenir les premiers chiffres en fonction de la longueur du code de zone;

Il est difficile de trouver la solution pour cela. La bibliothèque libphonenumber offre beaucoup de classes utiles, mais celle que je pensais pouvoir m'aider m'a amené à un autre paradoxe. La méthode phoneUtil.parse (number, countryAcronym) renvoie le numéro avec son indicatif de pays, mais ce qu'il fait, c'est que si je passe le numéro avec l'acronyme "US", il renvoie le numéro avec le code de pays '1', Maintenant, si je change l'acronyme de "BR", il change le nombre et renvoie "55" qui est le code de pays pour le Brésil. Donc, de toute façon, j'ai besoin de l'acronyme du pays basé sur le nombre que je reçois.

EX:

numberReturned = phoneUtil.parse(phoneNumber, "US"); 
phoneUtil.format(numberReturned, PhoneNumberFormat.INTERNATIONAL); 

Le code ci-dessus, renvoie le numéro avec le code du pays des États-Unis, mais maintenant si je change le « US » à tout autre acronyme de pays, il retournera le même nombre, mais avec le code pays de ce pays.

Je sais que cette lib n'est pas censé deviner de quel pays le numéro est (CE SERAIT BEAUCOUP !!), mais c'est ce dont j'ai besoin.

Cela me rend vraiment fou. J'ai besoin de bons conseils des mages sages de SO.

Si vous s'il vous plaît pourrait m'aider avec une bonne décision, je serais tellement merci.

Merci.


PS: Si vous utilisez déjà libphonenumber et a plus d'expérience avec cela, s'il vous plaît me guider sur quelle classe à utiliser, s'il est capable de résoudre ce problème. =)

Répondre

0

1) Le deuxième paramètre à phoneUtil.parse doit correspondre du pays que vous êtes actuellement en - il est utilisé si le numéro de téléphone reçu ne contient pas un préfixe international. C'est pourquoi vous obtenez des résultats différents lorsque vous modifiez le paramètre: le numéro de téléphone que vous transmettez ne contient pas un tel préfixe, donc il utilise simplement ce que vous lui avez dit. Toute solution d'analyse syntaxique destinée à déterminer si le numéro de téléphone est international ou non devra en être consciente: selon la source, même un numéro national peut être représenté par le préfixe de numérotation international (généralement abrégé en +, puisque cela varie d'un pays à l'autre, mais ce n'est pas garanti).

2) Pour l'analyse de l'indicatif régional, il n'existe pas de norme universelle; certains pays ne les utilisent pas, et même à l'intérieur d'un pays, les indicatifs régionaux peuvent avoir des longueurs différentes (par exemple en Allemagne). Je ne suis pas au courant d'une bibliothèque internationale pour cela - et une recherche rapide ne trouve rien (bien que cela ne signifie pas qu'il n'existe pas). Vous pourriez avoir besoin de rouler votre propre ici; Si vous avez seulement besoin de soutenir un seul pays, cela ne devrait pas être trop dur.

+0

Oui. Mais le problème est que je dois soutenir presque tous les pays. Cela va être dur, beaucoup de recherche et de réflexion pour arriver à une conclusion simple et sage. Une bonne approche consiste à obtenir le pays le nombre est, est le seul moyen de le faire en analysant le nombre? Merci quand même. – rogcg

+0

À peu près, oui. Vous devrez vérifier si la chaîne du numéro de téléphone commence par +, ou quel que soit le préfixe approprié pour composer internationalement pour le pays dans lequel vous vous trouvez - si ce n'est pas le cas, alors c'est national. Le téléphone sait quels chiffres envoyer à la place de ce signe +, mais je ne sais pas comment le récupérer dans votre code. –

Questions connexes