алгоритм разделения телефонных номеров iphone? - PullRequest
1 голос
/ 14 декабря 2011

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 10 сентября 2012

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

0 голосов
/ 14 декабря 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] = "....."
0 голосов
/ 14 декабря 2011

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

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

...