Работа с форматами телефонных номеров - PullRequest
1 голос
/ 10 октября 2011

Я думаю, что здесь я сталкиваюсь с парадоксом.

То, что я пытаюсь сделать, это когда я получаю / совершаю вызов, у меня есть номер, поэтому мне нужно знать, является ли он международным номером, если это местный номер и т. Д.

Проблема:

  1. Чтобы я знал, является ли число международным, мне нужно проанализировать его и проверить его длину, но длина отличается от страны к стране, поэтому я должен сделать метод, который анализирует и распознает для каждой страны? (На мой взгляд не функционально);
  2. Чтобы я знал, является ли это местный номер, мне нужен код города, поэтому я должен сделать то же самое, разобрать номер и проверить длину, получить первые числа на основе длины кода города;

Довольно сложно найти решение для этого. Библиотека libphonenumber предлагает множество полезных классов, но тот, который, как мне показалось, может мне помочь, привел меня к другому парадоксу.

Метод phoneUtil.parse (number, countryAcronym) возвращает номер с кодом страны, но если он передаст номер с аббревиатурой «US», он вернет номер с кодом страны «1», теперь если я изменю акроним на «BR», он изменит номер и вернет «55», то есть код страны для Бразилии. Так или иначе, мне нужна аббревиатура страны, основанная на числе, которое я получаю.

EX:

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

Приведенный выше код возвращает номер с кодом страны США, но теперь, если я заменю «США» на любую другую аббревиатуру страны, он вернет тот же номер, но с кодом страны этой страны.

Я знаю, что эта библиотека не должна угадывать, из какой страны число (ЭТО БУДЕТ УДИВИТЕЛЬНО !!) , но это то, что мне нужно.

Это действительно сводит меня с ума. Мне нужны хорошие советы от мудрых магов СО.

Если бы вы могли помочь мне с правильным решением, я был бы так благодарен.

Спасибо.


PS: Если вы уже используете libphonenumber и у вас больше опыта с этим, сообщите мне, какой класс использовать, если есть способный решить эту проблему. =)

1 Ответ

0 голосов
/ 10 октября 2011

1) Второй параметр phoneUtil.parse должен соответствовать стране, в которой вы в данный момент находитесь - он используется, если полученный номер телефона не включает международный префикс.Вот почему вы получаете разные результаты при изменении параметра: номер телефона, который вы передаете, не содержит такого префикса, поэтому он просто использует то, что вы сказали.номер телефона является международным или нет, необходимо знать об этом: в зависимости от источника, даже национальный номер может быть представлен с префиксом международного набора (обычно абстрагируется от +, поскольку в разных странах он различается, но это не гарантируется)

2) Для разбора кода города не существует универсального стандарта;некоторые страны не используют их, и даже внутри страны коды могут иметь разную длину (например, Германия).Мне не известна международная библиотека для этого - и быстрый поиск ничего не находит (хотя это не значит, что ее не существует).Возможно, вам придется свернуть свой собственный здесь;если вам нужно поддержать только одну страну, это не должно быть слишком сложно.

...