Нормализация номера телефона: какие-либо существующие библиотеки?
У меня есть система, которая использует номера телефонов как уникальные идентификаторы. По этой причине я хочу отформатировать все номера телефонов, когда они поступают, используя нормализованный формат. Поскольку я не контролирую свои исходные данные, мне нужно самостоятельно разобрать эти номера и отформатировать их перед добавлением их в мою БД.
Я собираюсь написать парсер, который может читать телефонные номера и выводить нормализованный формат телефона, но прежде чем я это сделаю, мне было интересно, знают ли кто-либо о каких-либо ранее существовавших библиотеках, которые я мог бы использовать для форматирования телефонных номеров.
Если нет существующих ранее библиотек, что я должен иметь в виду при создании этой функции, которая может быть не очевидна?
Хотя моя система только имеет дело с американскими номерами прямо сейчас, я планирую включить поддержку международных номеров на всякий случай, так как есть шанс, что это будет необходимо.
Изменить Я забыл упомянуть, что использую С#.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, списке рассылки и контролере источника, чтобы убедиться, что они еще не решили эту ошибку.
Ответ 3
Примеры perl и rails
http://validates-as-phone.googlecode.com/svn/trunk/README
http://www.perlmonks.org/?node_id=159645
Ответ 4
Просто выделите любые цифры, возможно, используя RegEx: [^\d]
Единственное исключение может быть, если вы хотите обрабатывать расширения, отличать число без кода области, но с 3-значным расширением, или если вам нужно обрабатывать международные номера.
Ответ 5
Что вам нужно, это список всех кодов стран и начинайте сопоставлять строки с несколькими буквами по списку кодов стран, чтобы убедиться, что он правильный, а затем остальную часть номера, убедитесь, что все цифры и правильная длина, которая обычно меняется от 5 до 10 цифр.
Чтобы выполнить проверку кодов стран, установите NGeoNames nuget, который использует веб-сайт www.geonames.org, чтобы получить список всех кодов стран, которые будут использоваться для сопоставления с ними.