php проверка мобильного номера
Регулярное выражение для получения номера телефона
Номер может принимать вид не только как написано выше, но и есть варианты
Как составить регулярное выражение, чтобы вытягивался только номер, а остальное не учитывалось. В идеале нужно приводить номер к единообразию но пока это не выйдет. Обрезкой не выйдет т.к. начало номера может быть разное (окончание по знаку Отслеживать
3 ответа 3
Вам следует разделить вытаскивание номера и его форматирование. Конечно, всё можно сделать и одной регуляркой, но это решение не будет выглядеть чисто.
Теперь этот номер надо отформатировать. Обычно номера телефонов приводят к числовому значению, поэтому лучше всего просто удалить лишние символы из номера с помощью функции str_replace() :
Если будете помещать номер телефона в базу данных, выбирайте какое-нибудь текстовое поле, иначе те номера, что начинаются с нуля, как верно подметил @Miron, в дальнейшем могут быть некорректно обработаны. Старайтесь работать с номером телефона как со строкой, а не как с числом.
Чтобы приводить номер к единому образу следует пользоваться библиотеками для форматирования. Например, популярной библиотекой libphonenumber :
Предлагаю автору вопроса, все же для начала привести базу номеров телефонов к единому виду, чтобы не хранить в БД некорректные номера. Если номера телефонов могут быть из разных стран, нужно обязательно хранить код страны отдельно от самого номера и кода оператора/города. Иначе могут возникнуть проблемы.
Никогда не храните номера телефонов, в виде числа. Связано это с тем, что если номер телефона будет начинаться с нуля(ей) при приведении его к типу int вы навсегда потеряете ведущие нули. Номера телефонов нужно хранить исключительно в виде строки (string).
Подтверждение номера телефона по SMS
Широкое распространение на сайтах коммерческой тематики получили формы обратной связи типа «Заказать звонок». Пользователю сайта предлагается форма с полями: имя и телефон. Заполнив данные, пользователь ждет звонка на указанный номер телефона. А что если пользователь указал не свой телефон?
Или другая ситуация: пользователь сайта забыл свой пароль от учетной записи и в качестве альтернативы желает получить новый пароль на свой номер телефона (указанный в учетной записи). Естественно, он должен знать свой номер телефона и иметь его под рукой, так как SMS придет лишь на прикрепленный телефон.
Подобных ситуаций в современных интернет-реалиях множество, если вы администратор сайта, имеющий дело с учетными записями пользователей, Вам наверняка будет полезной такая функция как подтверждение номера (валидация) мобильного телефона по SMS.
Верификация телефона по SMS
Проверить принадлежность номера телефона пользователю достаточно просто: на номер телефона высылается одноразовый код в SMS сообщении с последующим подтверждением кода на сайте.
Форма для подтверждения телефона по SMS (которую мы сегодня сделаем собственноручно) выглядит примерно следующим образом:
Форма для верификации телефона по одноразовому SMS
Принцип работы
Данный скрипт не является «готовым продуктом», он лишь иллюстрирует механизм верификации телефона по SMS и потребует от Вас его адаптации под конкретные нужды.
Использование SMS шлюза
После регистрации, в личном кабинете в меню найдите «Программистам», в этой вкладке найдете Ваш api_id. Он вам понадобится далее.
HTML форма валидации телефона
Создадим HTML форму для валидации телефона пользователя: модальное окно, поля для ввода и проверки данных (примерный вид как на скрине выше). Для этого создадим файл index.php c содержимым:
В этом файле обратим внимание на последние строчки, где указывается маска для ввода телефона. Для Украины: +38 (099) 999-99-99 для России: +7 (999) 999-99-99
И создадим файл со стилями CSS под названием «style.css» (положим его рядом с index.php)
Обработчик подтверждения номера телефона по SMS вынесем в отдельный файл «act.php«. Его содержимое:
В обработчике формы обратите внимание на конфигурацию параметров в первых строках: необходимо указать:
В коде обработчика, в случае успешной валидации телефона, изменяете код под свои нужды.
Специализируюсь на безопасности сайтов: защищаю сайты от атак и взломов, занимаюсь лечением вирусов на сайтах и профилактикой.
Наверняка у Вас есть вопросы, просьбы или пожелания. Не стесняйтесь спросить, я отвечаю всегда быстро.
Проверка данных регулярными выражениями в PHP
Содержание:
Сборник основных шаблонов регулярных выражений на PHP для проверки данных.
Проверка набора из латинских букв и цифр
Регулярное выражение для проверки набора только из латинских букв и цифр:
Если необходимо добавить в набор некоторые символы:
Проверка на кириллицу и цифры
Регулярное выражение для проверки набора только из букв кириллицы и цифр:
Проверка на число
Регулярное выражение для проверки данных на целое число:
Регулярное выражение для проверки данных на тип Float (числа с плавающей точкой):
Проверка логина
Регулярное выражение для проверки логина. Разрешено использовать только латинские буквы, цифры, тире и знак подчёркивания. Длина логина от 2 до 20 символов (включительно):
Проверка Email
Регулярное выражение для проверки Email:
Проверка номера телефона
Регулярное выражение для проверки номера телефона:
Проверка даты по формату
Формат MySQL YYYY-MM-DD :
Проверка md5-хэша
Регулярное выражение для проверки на корректность md5-хэша:
Проверка IP адресов
Регулярное выражение для проверки IPv4 адреса:
Проверка IPv6 адреса:
Проверка доменного имени
Регулярное выражение для проверки на корректность доменного имени сайта:
Проверка длины номера телефона
Уважаемые форумчане!
Возникла трудность с обработчиком формы, поиск не дал результатов или я их не правильно понимаю.
В общем суть проблемы
Нужно не дать обработчику отправить форму, если не правильно или не полностью заполнено поле.
Полный код обработчика:
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Валидация номера телефона
кто подскажет ркгулярку, чтобы номер телефона можно было воодить только в таком формате (###).
Форматировать вывод номера телефона
php строчка через echo выводит на страницу номер телефона, заполненный пользователем. Как.
Вывод номера телефона из текста
Доброе время суток. Заранее извиняюсь если тема повторяется, но в поиске я ответа так и не нашел.
Защита номера телефона от парсинга
Всем доброго дня! Хочу спросить у тех, кто делал всевозможные парсеры контента: возможно спрятать.
Спасибо всем, кто откликнулся, можно мне все же прямо в моем коде указать, а то я в пхп не очень понимаю, но задача поставлена и ее мне нужно исполнить
Добавлено через 46 секунд
1
i
Куда и в каком виде вставлять?
Добавлено через 1 минуту
+375 44-779-16-00 Вот в таком виде приходит на мыло
Добавлено через 2 минуты
грёбаные регулярки 😀
не не.. я не спорю. И готов поклоняться богам, которые у них шарят.
А я не бог нихрена
Добавлено через 1 минуту
если
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Парсинг номера телефона с событием
Здраствуйте. Я новичёк в парсинге и решил написать простой код для парсинга номера телефона со.
Регулярное выражение для номера телефона
Здравствуйте. Подскажите, пожалуйста, как можно преобразовать строку 8 (999) 999-99-99 в.
Вывод номера телефона в виде Skype
Привет всем!Извините если «не угадал» с разделом, вопрос такой: У меня на сайте идёт вывод.
Перебрать все варианты номера телефона
Подскажите пожалуйста. Есть номер телефона 99999, как перебрать и вывести все варианты написания.
Форматирование телефонных номеров на PHP
Возникла задача автоматического форматирования телефонных номеров в виде страна (город) номер, и первым делом я обратился к существующим решениям.
К сожалению, оказалось, что все найденные решения основываются на обычном подгоне строки под пользовательский формат, имея ограниченную область применения и ошибки при выходе за ее пределы.
Для начала приведу обзор найденных решений. Тем, кому это не интересно, рекомендую прокрутить ниже до заголовка «Форматы телефонных номеров» — там уже представлен мой вариант разбора номера с ссылкой на код.
Всеуничтожающий примитив
Один из простых вариантов шустрого форматирования телефонных номеров, но каждое такое решение ориентировано на телефонные номера из конкретной локальной зоны и не является решением задачи.
Форматирование с помощью sscanf
Не смотря на простое решение, эта функция уже умеет форматировать номера длиной 7, 10 и более цифр, но попадись ей номер из российской глубинки, она подавится и выдаст ошибочный результат.
Symfony, lib/helpers/PhoneHelper.php, format_phone
Функция позволяет не только форматировать в XXX-XXXX, (XXX) XXX-XXXX и X (XXX) XXX-XXXX, но и конвертировать номера, написанные цифрами. Ограниченность функции в форматировании номеров длиной 7, 10 и 11 символов никак не подходит.
Форматы телефонных номеров
Из вики-статьи видно, что никакого простого и удобного паттерна для быстрого форматирования всех номеров не существует. Коды стран регистрируются, подобно доменным зонам, а коды городов — остаются на совести каждой из стран.
Другими словами, маршрутизация звонков идет по маске, начиная с кода страны: звонок, направленный в конкретную страну далее пробивает себе маршрут в соответствии с кодами области, города, района и т.д. начиная с самой левой цифры, пока последнее звено не перебросит его на конкретный телефонный/факсовый аппарат. Проблема усложняется еще и тем, что коды городов внутри стран точно так же не поддаются единой сквозной стандартизации, т.е. в худшем из вариантов для правильного форматирования номеров придется использовать двумерный массив с кодами стран и их городов.
На самом деле, все оказалось не так страшно. В каждой стране можно разделить все коды городов на две части: на те, что в большинстве своем совпадают по длине, и все остальные. Этого достаточно, чтобы резко сократить область перебора кодов при сравнении. Т.е. можно создать массив из данных по каждой стране вида:
// тесты
echo phone( «+38 (044) 226-22-04» ). «
» ;
echo phone( «0038 (044) 226-22-04» ). «
» ;
echo phone( «+79263874814» ). «
» ;
echo phone( «4816145» ). «
» ;
echo phone( «+44 (0) 870 770 5370» ). «
» ;
echo phone( «0044 (0) 870 770 5370» ). «
» ;
echo phone( «+436764505509» ). «
» ;
echo phone( «(+38-048) 784-15-46 » ). «
» ;
echo phone( «(38-057) 706-34-03 » ). «
» ;
echo phone( «+38 (044) 244 12 01 » ). «
» ;
?>
Функция полностью решает поставленную задачу.
Из недостатков функции следует отметить отсутствие анализа медленных участков с целью оптимизаци, а также обработки телефонных номеров, где есть код города, но нет кода страны (в этом случае достаточно бить на блоки функцией phoneBlocks или воспользоваться одним из решений выше). При использовании ее в какой-либо реализации необходимо заменить глобальную переменную на ссылку в параметре, а также можно доработать или заменить формат вывода, за который отвечает функция phoneBlocks.
Самое интересное
Используя информацию с сайтов:
http://www.mtt.ru/info/def/index.wbp
http://www.hella.ru/code/codeuro.htm
http://www.scross.ru/guide/phone-global/
я собрал массив данных по всем представленным странам, включая города-исключения, флаги zeroHack, а также коды мобильных сетей. Код можно загрузить здесь.
Быстродействие
Вопреки всем самым пессимистичным ожиданиям, код отрабатывает 10.000 номеров менее чем за 2 секунды.