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

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

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

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

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

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


person Dan Herbert    schedule 03.11.2008    source источник
comment
@ Дэн, я думаю, ты получишь лучший ответ, если укажешь нам, какой язык ты используешь. :-)   -  person Onorio Catenacci    schedule 03.11.2008
comment
Я добавил тег С# 2.0 к этому вопросу.   -  person Onorio Catenacci    schedule 03.11.2008
comment
@ Джоэл, я не хочу начинать войну редактирования, но я пометил вопрос с помощью C # 2.0 по (я думаю) уважительной причине: stackoverflow.com/questions/247621/   -  person Onorio Catenacci    schedule 03.11.2008
comment
@ Дэн, ты нашел библиотеку для нормализации телефонных номеров?   -  person marc.d    schedule 28.10.2009
comment
@ marc.d Нет, не знал. Я закончил тем, что написал свой собственный, который достаточно хорошо соответствовал моим потребностям.   -  person Dan Herbert    schedule 28.10.2009
comment
@Dan, не могли бы вы сделать свою библиотеку общедоступной, если это возможно? я хотел бы перевести его на решение javascript/jQuery. atm единственный рабочий пример, который я нашел, написан на Perl, к сожалению, мои знания Perl близки к нулю.   -  person marc.d    schedule 29.10.2009
comment
@ marc.d К сожалению, большая часть кода была написана в рамках проекта, на который распространяется соглашение о неразглашении. Я вижу, что я могу сделать, поскольку я понимаю его полезность. Я обновлю этот вопрос, если у меня будет что-то, что я могу опубликовать.   -  person Dan Herbert    schedule 29.10.2009


Ответы (5)


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

person friism    schedule 04.02.2012
comment
Эта библиотека потрясающая. Отличное предложение. - person Rebecca; 06.10.2016

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

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

person rmeador    schedule 03.11.2008


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

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

person Joel Coehoorn    schedule 03.11.2008

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

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

person Korayem    schedule 28.08.2016