Есть ли такая вещь, как библиотека для очистки телефонных номеров

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

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

Я хотел бы сообщить библиотеке/инструменту страну, из которой я звоню, номер телефона в свободном формате и, возможно, страну, которой он соответствует (поскольку это поможет сгенерировать международный код, если он не введен), и он использует известные шаблоны, чтобы лучше всего угадать номер, который будет работать в моей стране вызова

Так, например, при звонке из США на номер Великобритании:

+44 (0) 1225-344567 => 011441225344567

Или при звонке из Великобритании на номер в США:

(613) 4562342 => 0016134562342

Кто-нибудь знает какие-либо (в идеале дружественные к .NET Framework) решения, которые позволят мне, несомненно, повторно изобретать колесо.


person Kram    schedule 27.06.2011    source источник
comment
Такая библиотека кажется очень нишевой. Не говоря уже о том, что нет никаких стандартных правил. Даже в одной стране могут быть разные форматы номеров, если вы звоните с/на мобильный телефон на стационарный телефон! К сожалению, лучшим решением для международных телефонных номеров является текстовое поле произвольной формы.   -  person Mike Caron    schedule 27.06.2011
comment
Спасибо. У нас уже есть коробка свободного формата. Я связал это с нашей телефонной системой, чтобы люди могли звонить клиентам без необходимости (часто неправильно) вводить номер в телефон. Однако мне пришлось реализовать некоторый пользовательский код для обработки чисел, как в приведенных выше примерах... и это усложняется тем, что у нас есть офисы как в США, так и в Великобритании, и мне пришло в голову, что может быть какой-то код уже вышел там, чтобы сделать это (даже если нам нужно заплатить за это) - у меня есть рыба покрупнее;)   -  person Kram    schedule 27.06.2011
comment
stackoverflow.com/q/187216/469210 выглядит аналогично.   -  person borrible    schedule 28.06.2011
comment
У меня есть библиотека C# на GitHub, которая предлагает именно эту функциональность. Он использует встроенную XML-базу данных стран и кодов городов в каждой стране, чтобы понять контекст любого телефонного номера и узнать, как позвонить на любой номер с любого другого номера.   -  person Ty H.    schedule 06.09.2015


Ответы (5)


Да: стандартная библиотека Google Java, C++ и Javascript для синтаксического анализа, форматирования, хранения и проверки международных телефонных номеров теперь перенесена на C#:

https://github.com/erezak/libphonenumber-csharp

Удачи!

person LaTisha    schedule 27.07.2011
comment
Из того, что я могу сказать, это действительно лучший вариант... однако я очень хочу его и в .Net... только что наткнулся на это, которое утверждает, что выполняет эту работу: blog.thekieners.com/2011/06/06/ - person Kram; 28.07.2011

Я реализовал именно это, Марк. Я работаю в операторе беспроводной связи, и у меня есть международное приложение для отправки SMS. Мне неизвестны какие-либо сторонние библиотеки, реализующие эти правила. Как упоминалось выше, нельзя просто иметь дело со случайным вводом, поскольку форматы телефонных номеров различаются в зависимости от страны. В некоторых странах, таких как Германия, коды городов и телефонные номера имеют переменную длину. Если они не вставят код страны, вам конец. Однако в моем случае я могу предположить, что если в нем отсутствует код страны, это номер телефона в США. Результаты моего фильтра оказались очень точными с пользователями и входными данными, которые у меня были.

Можно сделать некоторые предположения, и, зная целевую аудиторию, регистрируя входные данные и анализируя, можно получить информацию. Моя первая реализация была для веб-приложения с «белой меткой», которое используется для тестирования разными людьми по всему миру. . Я быстро обнаружил, что большинство иностранцев действуют сообща и привыкли к квазистандартному формату +. Обычно больше всего запутываются американцы, вводящие телефонные номера. Европейцы очень привыкли к международному набору номера.

Первое правило — удалить все, кроме цифр и ведущего «+».

Если в полученном числе меньше 8 цифр, это мусор, укажите ошибку пользователя.

Если полученный номер начинается с «+», предполагается, что это стандартный формат и что следующие 2–6 цифр представляют «код страны». Выясните код страны, затем обработайте оставшиеся цифры в соответствии с правилами для этой страны.

Если номер начинается с 0, предположим, что кто-то ввел префикс международного доступа и удалил начальные 0 и 1, тогда: если оставшееся число состоит из 10 цифр, предположим, что это был номер США, введенный американцем, и обработайте его соответствующим образом. Если оставшееся число не 10 цифр, а не менее 8, предположите, что первые 2-6 цифр являются кодом страны, найдите код страны и обработайте в соответствии с правилами этой страны.

Если номер начинается с 1 и состоит из 11 цифр, предположите, что это номер США (или острова Карибского моря), и обработайте его соответствующим образом.

ЕСЛИ номер начинается с 1 и не состоит всего из 11 цифр, удалите начальные единицы, проверьте, осталось ли не менее 8 цифр, и предположите, что оставшиеся начальные цифры от 2 до 6 являются кодом страны и обрабатываются в соответствии с правилами страны.

Наконец, если номер не начинается с +, 0 или 1 и содержит не менее 8 цифр, предположим, что это стандартная запись без +, то есть сначала код страны, используйте первые 2–6 цифр в качестве кода страны. и обрабатывать в соответствии с правилами этой страны.

Хитрость во всем этом заключается в том, чтобы иметь отображение всех кодов стран мира и информацию о плане нумерации для каждой страны. У меня есть эта карта и правила для многих стран. Если вам нужна эта информация, я буду рад поделиться ею вместе с некоторым кодом C#, который определяет, какая страна. Сообщи мне.

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

person Christo    schedule 28.06.2011
comment
Как связаться с вами, Христо? (Мне нужна ваша реализация, она более полная, чем моя) - person Peter Wone; 28.06.2011
comment
@Peter Он сказал, что я работаю на оператора беспроводной связи, так что это повседневная работа - очень вероятно, что она принадлежит его работодателю, и он не может дать ее вам. (не умоляя их открыть исходный код) - person Rup; 28.06.2011

Библиотека Google для синтаксического анализа, форматирования, хранения и проверки международных телефонных номеров теперь перенесена на C#.

https://github.com/erezak/libphonenumber-csharp

person Aaron Gray    schedule 10.07.2013

Нет, нет :) Существует очень мало правил, регулирующих телефонные номера между странами. Некоторые страны даже имеют несколько представительств.

Великобритания, например, имеет коды городов переменного размера, например:

  • 0121 = Бирмингем
  • 01223 = Кембридж
person IanNorton    schedule 28.06.2011

Существует «стандарт» для форматирования международных (и национальных) телефонных номеров. Выглядят они так: +31 42 123 4567 (переход + префикс страны). Пример взят из Википедии. Хотя не стоит ожидать, что кто-то войдет в него таким образом. По моему опыту, пользователи, скорее всего, будут придерживаться привычного формата.

Я не знаю ни одной библиотеки, которая будет конвертировать между всеми (в основном локальными) представлениями в упомянутый мной или любой другой формат.

person Sascha    schedule 28.06.2011