Нормализация телефонного номера: есть ли какие-либо существующие библиотеки? - PullRequest
16 голосов
/ 03 ноября 2008

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

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

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

Хотя сейчас моя система работает только с американскими номерами, я планирую попытаться включить поддержку международных номеров на всякий случай, поскольку есть вероятность, что это потребуется.

Редактировать Я забыл упомянуть, что использую C # .NET 2.0.

Ответы [ 5 ]

18 голосов
/ 04 февраля 2012

Вы можете использовать libphonenumber от Google. Вот сообщение в блоге:

http://blog.appharbor.com/2012/02/03/net-phone-number-validation-with-google-libphonenumber

Разбор чисел так же прост, как установка пакета NuGet и выполнение этого:

var util = PhoneNumberUtil.GetInstance();
var number = util.Parse("555-555-5555", "US");

Затем вы можете отформатировать число следующим образом:

util.Format(number, PhoneNumberFormat.E164);

libphonenumber поддерживает несколько форматов, отличных от E.164.

5 голосов
/ 03 ноября 2008

В настоящее время я участвую в проекте OpenMoko , который разрабатывает сотовый телефон с полностью открытым исходным кодом (включая аппаратное обеспечение). Было много проблем вокруг нормализации телефонных номеров. Я не знаю, нашел ли кто-нибудь еще хорошее решение. Кажется, самая большая проблема связана с телефонными номерами в США, поскольку иногда они вводятся с 1 на передней панели, а иногда нет. В зависимости от того, что вы сохранили в списке контактов, он может отображать или не отображать информацию об идентификаторе вызывающего абонента правильно. Я бы порекомендовал убрать 1 из номера телефона (хотя я бы ожидал, что большинство людей не будут вводить его в первую очередь). Возможно, вам также понадобится найти знак плюс или код страны на лицевой стороне международных номеров.

Вы можете просмотреть сайт OpenMoko, список рассылки и систему контроля версий, чтобы убедиться, что они уже решили эту ошибку.

2 голосов
/ 03 ноября 2008
1 голос
/ 03 ноября 2008

Просто удалите все не-цифры, возможно используя RegEx: [^\d]

Единственным исключением может быть, если вы хотите обрабатывать добавочные номера, различать номера без кода города, но с 3-значным добавочным номером, или если вам нужно обрабатывать международные номера.

0 голосов
/ 29 августа 2016

Вам нужен список всех кодов стран и начните сопоставлять первые несколько символов вашей строки со списком кодов стран, чтобы убедиться, что это правильно, а затем для остальной части номера, убедитесь, что это все цифры и правильной длины, которая обычно варьируется из 5-10 цифр.

Чтобы выполнить проверку по кодам стран, установите NGeoNames nuget , который использует веб-сайт www.geonames.org , чтобы получить список всех кодов стран, которые будут использоваться для сопоставления с ними.

...