Нормализация номера телефона: какие-либо существующие библиотеки?

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

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

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

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

Изменить Я забыл упомянуть, что использую С#.NET 2.0.

Ответы

Ответ 1

Вы можете использовать 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.

Ответ 2

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

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

Ответ 4

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

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

Ответ 5

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

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