Алгоритм разделения телефонного номера iphone?

В iPhone есть довольно неплохая функция разделения телефонных номеров, например:

Мобильный телефон в Сингапуре: +65 9852 4135
Телефон для жителей Сингапура: +65 6325 6524
Телефон для жителей Китая: +86 135-6952-3685
Телефон для жителей Китая: +86 10-65236528
Гонконг: +886 956-238-82
США: +1 (732) 865-3286

Обратите внимание на приятные особенности:
- разделение кода страны, кода города и всего остального происходит автоматически;
- разделитель также отлично подходит для разных стран, например "()", "-" и пробел.

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


person athos    schedule 14.12.2011    source источник


Ответы (3)


Вы можете получить аналогичную функциональность с библиотекой кода libphonenumber.

person Dave    schedule 10.09.2012
comment
ага, так что я должен был подумать: кто предоставит функцию сохранения, как вы? соперник, конечно! :D - person athos; 12.09.2012

Интересно, что вы не можете использовать для этого NSNumberFormatter, но вы можете написать для него свой собственный класс. Просто создайте новый класс, установите такие свойства, как countryCode, areaCode и number, а затем создайте метод, который форматирует число на основе countryCode.

Вот отличный пример: http://the-lost-beauty.blogspot.com/2010/01/locale-sensitive-phone-number.html

person PengOne    schedule 14.12.2011
comment
ну, задача не в кодировании, а в знании, не знаю, 200 стран мира? - person athos; 14.12.2011
comment
Вместо того, чтобы раздражаться на людей, которые тратят время на то, чтобы попытаться помочь вам, возможно, вы могли бы уделить больше времени формулированию того, какую часть проблемы вы не можете решить. Вам нужна таблица форматов, а не способ форматирования чисел. - person PengOne; 14.12.2011
comment
Извините, теперь я понимаю, что исходный вопрос неоднозначен. Я не указал, что проблема заключается в разборе или знании домена телефонного кода для анализа. - person athos; 14.12.2011

В качестве отступления: друг рассказал мне о гигантском регулярном выражении, которое ему приходилось поддерживать и которое могло выбирать телефонные номера из перехваченных сообщений из сотен стран по всему миру. Это было очень нетривиально.

К счастью, ваша проблема проще, так как вы можете просто иметь таблицу с форматами для каждой страны:

format[usa] = "+d (ddd) ddd-dddd";
format[hk] = "+ddd ddd-ddd-dd";
format[china_mobile] = "+dd ddd-dddd-dddd";
...

Затем, когда вы печатаете, вы просто выводите одну цифру из строки номера телефона в каждом месте d по мере необходимости. Это предполагает, что вы знаете страну, что является достаточно безопасным предположением для телефонных устройств — выберите форматы «по умолчанию» для нескольких соседних стран.

Поскольку в некоторых странах используются разные форматы с разной длиной, вам может понадобиться хранить ваша таблица с дополнительной информацией:

format[germany][10] = "..."
format[germany][11] = "....."
person sarnold    schedule 14.12.2011