Существует ли валидатор телефонных номеров для стран Perl? - PullRequest
3 голосов
/ 16 марта 2009

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

Например: страна = Малайзия, если пользователь введет номер телефона = +60127008007, после проверки вернётся верный номер мобильного телефона в Малайзии, где В местную Малайзию мы звоним: 0127008007 напрямую. "+6" - международный код.

Принимая во внимание, что если пользовательский номер телефона = +600127008007, он возвращается как неверный номер телефона. Потому что локально в Малайзии нет такого номера как: 00127008007.

Любой бесплатный модуль, который может сделать это, в CPAN или иным способом?

Ответы [ 7 ]

9 голосов
/ 16 марта 2009

Посмотрите на Number :: Phone :: NANP ( lNumber :: Phone :: NANP ). Я полагаю, вы добавите новые подклассы для непокрытых стран.

8 голосов
/ 16 марта 2009

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

Если действительный номер телефона (или адрес электронной почты) является абсолютным требованием для вашей компании, вы должны позвонить (или отправить электронное письмо) человеку по номеру (или адресу электронной почты) и попросить его ввести код, который вы ему дадите. Существует аппаратное / программное обеспечение , предназначенное для автоматического набора номеров и предоставления сообщения получателю. Вы можете использовать программное обеспечение преобразования текста в речь, такое как Festival , чтобы сыграть специальную клавишу на телефоне, а затем попросить их ввести ее на свой веб-сайт, чтобы подтвердить, что у них есть доступ к этому телефону. Даже это не является непогрешимым, поскольку я могу купить одноразовый сотовый телефон или создать одноразовый адрес электронной почты.

3 голосов
/ 17 марта 2009

Смысл проверки состоит в том, чтобы помочь пользователям, улавливая ошибки ввода, заставляя их использовать определенный формат во время ввода.

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

Зачем вам нужен подтвержденный номер телефона? Вы уверены, что пользователь не попытается ввести два числа в одном поле и разочароваться? Вы уверены, что пользователь не введет что-то вроде «555-5555 (спросить Стива)» или «555-5555 (добавочный номер 123)» или какой-либо другой полностью допустимый ввод? Вы уверены, что вы достаточно умны, чтобы предсказать, что каждый пользователь ввода может нуждаться в этом поле?

Не пытайтесь перехитрить своего пользователя. Помоги ему. :)

1 голос
/ 16 марта 2009

Практически невозможно вести актуальный список действительных кодов городов и длин номеров для каждой страны.

Я предлагаю вам проверить это:

  1. Международный телефонный код (от 1 до 3 цифр)
  2. Код города (обычно 3 цифры, но в диапазоне от 1 до 5 цифр)
  3. Номер телефона (обычно от 6 до 8 цифр, но от 4 до 13 цифр)

Таким образом, у вас есть от 6 до 21 цифры, с особой благодарностью Австрии. =)

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

0 голосов
/ 22 февраля 2011

Расширить на час. и точки Домчи: Есть две причины для подтверждения номера телефона:

  1. Чтобы помочь пользователю правильно ввести свой номер (часто, когда пользователь ХОЧЕТ, чтобы у вас был свой номер)
  2. Чтобы пользователь не мог продолжить, не введя действительный номер (часто, когда пользователь не хочет его вводить)

Если ваш случай - дело № 1, все, что вам нужно, - это простая проверка, так как вы не хотите препятствовать правильному вводу случайного случая и расстраивать вашего пользователя, вы просто хотите помочь им неправильно ввести их номер.

Если ваш случай - случай № 2, никакая проверка не помешает пользователю ввести действительный номер, который не принадлежит ему. Чтобы действительно сделать это, вам нужно будет сделать автоматический обратный вызов с кодом проверки, и в этом случае вы больше в случае № 1, так как им нужно будет предоставить правильный номер, чтобы получить код проверки. Это будет НАМНОГО больше работы, хотя.

В конце концов, вам действительно нужно только охватить случай № 1, помочь пользователю ввести правильный номер. Не расстраивайте потенциального пользователя только из-за проверки номера телефона.

0 голосов
/ 21 февраля 2011

Кто-то собирался перенести libphonenumber в Perl, но этого еще не произошло.

Уже есть полный порт для JavaScript.

Пока есть неполные порты для Ruby, PHP и Python. Порт C ++ ожидается через несколько месяцев.

Следите за: http://code.google.com/p/libphonenumber/ для любых других, как они объявлены.

0 голосов
/ 16 марта 2009

Я не знаю Perl, но это идеальный случай для использования Regexp.

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

...