PHP: Как проверить номер телефона, если он правильно сформирован? - PullRequest
0 голосов
/ 13 октября 2009

Используя PHP, как я могу проверить, правильно ли сформирован телефон #

Кажется, проще всего просто удалить все нечисловые данные, оставив только цифры. Затем, чтобы проверить, существуют ли 10 цифр.

Это самый лучший и простой способ?

Ответы [ 6 ]

2 голосов
/ 13 октября 2009

лучший? Нет. Проблемы, которые я вижу с этим подходом:

  • Некоторые коды городов - например, 000 - ### - #### - недействительны. Смотри http://en.wikipedia.org/wiki/List_of_NANP_area_codes
  • Некоторые биржи, такие как ### - 555 - #### - недействительны. Смотри http://en.wikipedia.org/wiki/555_%28telephone_number%29
  • Некоторые люди вводят 1 перед своим номером, то есть 1 - ### - ### - ####.
  • Некоторые люди доступны только с добавочного номера, например ### - ### - #### x ####.
  • Некоторые компании используют дополнительные цифры, например, 1-800-GO-FLOWERS. Дополнительные цифры просто игнорируются телефонной системой, но пользователь может ожидать, что сможет ввести все это.
  • Международные телефонные номера не обязательно состоят из 10 цифр, даже если вы не учитываете коды стран.

Достаточно хорошо? Вполне возможно, но это зависит от вас и вашего приложения.

0 голосов
/ 13 октября 2009

Ответ, если что-то «лучшее», почти невозможно (если только вы не отвечаете на свой вопрос).

То, как вы предлагаете это, убирая все нецифровые символы и затем проверяя, есть ли 10 цифр, может привести к нежелательному поведению для такой строки:

Джордж Вашингтон (22 февраля 1732 г. - 14 декабря 99 года) был командиром Континентальной армии в Американская революционная война и служил в качестве первого президента Соединенных Штаты Америки.

, поскольку удаление всех нецифровых символов приведет к строке 2217321499 длиной 10 цифр, но я очень сомневаюсь, что всю строку следует рассматривать как действительный номер телефона.

0 голосов
/ 13 октября 2009

Проблема с проверкой / фильтрацией данных обычно сводится к ответу на этот вопрос: «Насколько строгим я хочу быть?» который затем превращается в серию «характерных» вопросов

  • Собираетесь ли вы принимать международные номера?
  • Собираетесь ли вы принимать расширения?
  • Собираетесь ли вы использовать различные форматы, т. Е. (111) 222-3333 против 111,222,3333

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

  1. Код страны (необязательно)
  2. Номер телефона
  3. Расширение (опционально)

Все 3 поля могут быть программно ограничены / фильтры только для числовых значений. Затем вы можете объединить их перед сохранением в какой-либо анализируемый формат или сохранить каждое значение по отдельности.

0 голосов
/ 13 октября 2009

Какой формат вам нужен? Вы можете использовать регулярные выражения для этого.

0 голосов
/ 13 октября 2009

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

0 голосов
/ 13 октября 2009

Вы можете использовать для этого регулярное выражение:

$pattern_phone = "|^[0-9\+][0-9\s+\-]*$|i";
if(!preg_match($pattern_phone,$phone)){
    //Somethings wrong
}

Не проверял регулярное выражение, поэтому оно может быть неверно на 100%.

...