Проверка на корректность номера телефона php

In this short tutorial, we’re going to look at validating a phone number in PHP. Phone numbers come in many formats depending on the locale of the user. To cater for international users, we’ll have to validate against many different formats.

In this article

  • Validating for Digits Only
  • Checking for Special Characters
  • International Format
  • Key Takeaways
  • 10 minute read

Validating for Digits Only

Let’s start with a basic PHP function to validate whether our input telephone number is digits only. We can then use our isDigits function to further refine our phone number validation.

We use the PHP preg_match function to validate the given telephone number using the regular expression:

/^[0-9]{'.$minDigits.','.$maxDigits.'}z/

This regular expression checks that the string $s parameter only contains digits [0-9] and has a minimum length $minDigits and a maximum length $maxDigits. You can find detailed information about the preg_match function in the PHP manual.

Checking for Special Characters

Next, we can check for special characters to cater for telephone numbers containing periods, spaces, hyphens and brackets .-(). This will cater for telephone numbers like:

  • (012) 345 6789
  • 987-654-3210
  • 012.345.6789
  • 987 654 3210

The function isValidTelephoneNumber removes the special characters .-() then checks if we are left with digits only that has a minimum and maximum count of digits.

International Format

Our final validation is to cater for phone numbers in international format. We’ll update our isValidTelephoneNumber function to look for the + symbol. Our updated function will cater for numbers like:

  • +012 345 6789
  • +987-654-3210
  • +012.345.6789
  • +987 654 3210

The regular expression:

/^[+][0-9]/

tests whether the given telephone number starts with + and is followed by any digit [0-9]. If it passes that condition, we remove the + symbol and continue with the function as before.

Our final step is to normalize our telephone numbers so we can save all of them in the same format.

Key Takeaways

  • Our code validates telephone numbers is various formats: numbers with spaces, hyphens and dots. We also considered numbers in international format.
  • The validation code is lenient i.e: numbers with extra punctuation like 012.345-6789 will pass validation.
  • Our normalize function removes extra punctuation but wont add a + symbol to our number if it doesn’t have it.
  • You could update the validation function to be strict and update the normalize function to add the + symbol if desired.

Here’s how I find valid 10-digit US phone numbers. At this point I’m assuming the user wants my content so the numbers themselves are trusted. I’m using in an app that ultimately sends an SMS message so I just want the raw numbers no matter what. Formatting can always be added later

//eliminate every char except 0-9
$justNums = preg_replace("/[^0-9]/", '', $string);

//eliminate leading 1 if its there
if (strlen($justNums) == 11) $justNums = preg_replace("/^1/", '',$justNums);

//if we have 10 digits left, it's probably valid.
if (strlen($justNums) == 10) $isPhoneNum = true;

Edit: I ended up having to port this to Java, if anyone’s interested. It runs on every keystroke so I tried to keep it fairly light:

boolean isPhoneNum = false;
if (str.length() >= 10 && str.length() <= 14 ) { 
  //14: (###) ###-####
  //eliminate every char except 0-9
  str = str.replaceAll("[^0-9]", "");

  //remove leading 1 if it's there
  if (str.length() == 11) str = str.replaceAll("^1", "");

  isPhoneNum = str.length() == 10;
}
Log.d("ISPHONENUM", String.valueOf(isPhoneNum));

Проверка данных регулярными выражениями

Сборник регулярных выражений с примерами на PHP для проверки данных из полей форм.

1

Проверка чисел

$text = '1';
if (preg_match("/^d+$/", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

Числа с плавающей точкой (разделитель точка):

$text = '-1.0';
if (preg_match("/^-?d+(.d{0,})?$/", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

2

Проверка даты по формату

Формат DD.MM.YYYY

$text = '02.12.2018';
if (preg_match("/^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)dd$/", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

Формат MySQL YYYY-MM-DD

$text = '2018-04-02';
if (preg_match("/^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])$/", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

3

Проверка номера телефона

Ориентировано на российские мобильные + городские с кодом из 3 цифр.

$text = '+7(495)000-00-00';
if (preg_match("/^((8|+7)[- ]?)?((?d{3})?[- ]?)?[d- ]{7,10}$/", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

4

Проверка E-mail

$text = 'mail@snipp.ru';
if (preg_match("/^([a-z0-9_-]+.)*[a-z0-9_-]+@[a-z0-9_-]+(.[a-z0-9_-]+)*.[a-z]{2,6}$/i", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

5

Логин

Латинские буквы, цифры, - и _.

$text = 'admin-1';
if (preg_match("/^[a-z0-9_-]{2,20}$/i", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

6

Проверка md5-хэша

$text = 'ca040cb5d6c2ba8909417ef6b8810e2e';
if (preg_match("/^[a-f0-9]{32}$/", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

7

Цвета

Шестнадцатеричные коды цветов #FFF и #FFFFFF.

$text = '#fff';
if (preg_match("/^#(?:(?:[a-fd]{3}){1,2})$/i", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

8

IP адреса

IPv4 адрес:

$text = '192.168.0.1';
if (preg_match("/^((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)$/", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

IPv6 адрес:

$text = '2001:DB8:3C4D:7777:260:3EFF:FE15:9501';
if (preg_match("/((^|:)([0-9a-fA-F]{0,4})){1,8}$/i", $text)) {
	echo 'yes';
} else {
	echo 'no';
}

PHP

14.06.2018, обновлено 21.12.2022

Другие публикации

Маски ввода для текстовых полей

Применение масок ввода у полей форм значительно упрощает их использование, уменьшает количество ошибок и приводит…

date() – форматирование даты PHP

date($format, $timestamp) – форматирует дату/время по шаблону, где…

Генерация случайных буквенно-цифровых кодов в PHP

Несколько примеров, как сгенерировать случайные последовательности численных и буквенных строк заданной длины и…

Работа с FTP в PHP

Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.

Виртуальные коды клавиш (Virtual-Key Codes)

В следующей таблице приведены имена констант (VK Codes), десятичные и шестнадцатеричные значения для кодов виртуальных…

Загрузка файлов на сервер PHP

В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации при работе с данной темой.

Простейший способ валидации телефонных номеров на сайтах

28 July 2017, 18:47 MSK

Ещё одна раздражающая проблема многих сайтов — это когда сайт заставляет вводить тебя телефонный номер в понятном ЕМУ формате. Часто разработчики таких сайтов впридачу не удосуживаются сообщить пользователю, в каком формате сайт хочет видеть номер. Совсем клиника — когда ты видишь голое поле ввода номера, вводишь номер, жмёшь «Отправить» и получаешь сообщение типа «Телефон введён неправильно». Блин, а как правильно-то? И начинаешь перебирать разные форматы…

Сегодня рассмотрим простой способ валидации (проверки правильности ввода) телефонных номеров при условии того, что все посетители сайта — из России (или Казахстана). Российские номера телефонов начинаются с +7 и имеют далее 10 цифр. При этом, все люди привыкли вводить телефонные номера по-разному. Кто-то пишет

+79219710296,

кто-то

+7 921 971 02 96,

кто-то ставит скобки и тире:

+7 (921) 971-02-96,

кто-то пишет через восьмёрку: 89219710296, кто-то пишет просто 10 цифр: 921 971 02 96, ну и так далее. В нашем способе проверки все эти примеры будут считаться валидными, а на выходе мы будем иметь телефон в едином формате +7xxxxxxxxxx для удобного хранения номера в базе данных.

Код PHP-функции проверки телефонного номера:

function validate_russian_phone_number($tel)
{
    $tel = trim((string)$tel);
    if (!$tel) return false;
    $tel = preg_replace('#[^0-9+]+#uis', '', $tel);
    if (!preg_match('#^(?:\+?7|8|)(.*?)$#uis', $tel, $m)) return false;
    $tel = '+7' . preg_replace('#[^0-9]+#uis', '', $m[1]);
    if (!preg_match('#^\+7[0-9]{10}$#uis', $tel, $m)) return false;
    return $tel;
}

Функция принимает на входе строку с телефонным номером в произвольном формате, а возвращает либо телефонный номер в формате +7xxxxxxxxxx, либо false в случае, если номер не прошёл проверку (и об этом следует сообщить пользователю).

Спасибо за внимание. Делайте удобные сайты!

Сборник основных шаблонов регулярных выражений на PHP для проверки данных.

Проверка набора из латинских букв и цифр

Регулярное выражение для проверки набора только из латинских букв и цифр:

$pattern = '/^[a-z0-9]+$/i';
$var = 'String123';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Если необходимо добавить в набор некоторые символы:

// использовать тире
$pattern = '/^[a-z0-9-]+$/i';
$var = 'String-123';

// использовать знак подчёркивания
$pattern = '/^[a-z0-9-_]+$/i';
$var = 'String-1_23';

// использовать точку
$pattern = '/^[a-z0-9-_.]+$/i';
$var = 'String-1_23.end';

// использовать пробел
$pattern = '/^[a-z0-9-_. ]+$/i';
$var = 'String-1_23.end ps...';

Проверка на кириллицу и цифры

Регулярное выражение для проверки набора только из букв кириллицы и цифр:

$pattern = '/^[а-яё0-9]+$/iu';
$var = 'Строка123';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка на число

Регулярное выражение для проверки данных на целое число:

$pattern = '/^d+$/';
// Исключаем 0
$pattern = '/^[1-9]+$/';
// Не больше 1-й цифры
$pattern = '/^[1-9]{1}+$/';
// Максимум 4 цифры
$pattern = '/^[1-9]{1,4}+$/';

$var = 123;
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Регулярное выражение для проверки данных на тип Float (числа с плавающей точкой):

$pattern = '/^[0-9]*[.,][0-9]+$/';
$var = 123.45;
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

// Если нужно, чтобы пропускал и целые числа
$pattern = '/^[0-9]*[.,]?[0-9]+$/';

Проверка логина

Регулярное выражение для проверки логина. Разрешено использовать только латинские буквы, цифры, тире и знак подчёркивания. Длина логина от 2 до 20 символов (включительно):

$text = 'Login_123-45';
if (preg_match("/^[a-z0-9-_]{2,20}$/i", $text)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка Email

Регулярное выражение для проверки Email:

$pattern = '/^([a-z0-9_-]+.)*[a-z0-9_-]+@[a-z0-9_-]+(.[a-z0-9_-]+)*.[a-z]{2,6}$/';
$var = 'admin@site.com';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Более современный и правильный способ:

$var = 'admin@___site.com';
$email = filter_var($var, FILTER_SANITIZE_EMAIL);
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
  throw new InvalidArgumentException('Invalid Email');
return $email;

Проверка номера телефона

Регулярное выражение для проверки номера телефона:

$pattern = '/^((8|+7)[- ]?)?((?d{3})?[- ]?)?[d- ]{7,10}$/';
$var = '+7(982)000-00-00';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка даты по формату

Формат DD.MM.YYYY:

$pattern = '/^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)dd$/';
$var = '10.12.2019';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Формат MySQL YYYY-MM-DD:

$pattern = '/^[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])$/';
$var = '2019-12-10';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка md5-хэша

Регулярное выражение для проверки на корректность md5-хэша:

$pattern = '/^[a-f0-9]{32}$/';
$var = '341be97d9aff90c9978347f66f945e77';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка IP адресов

Регулярное выражение для проверки IPv4 адреса:

$pattern = '/^((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)$/';
$var = '192.168.0.1';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка IPv6 адреса:

$pattern = '/((^|:)([0-9a-fA-F]{0,4})){1,8}$/i';
$var = '2001:DB8:3C4D:7777:260:3EFF:FE15:9501';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

Проверка доменного имени

Регулярное выражение для проверки на корректность доменного имени сайта:

$pattern = '/^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$/';
$var = 'https://prowebmastering.ru';
if (preg_match($pattern, $var)) {
  echo 'Проверка пройдена успешно!';
} else {
  echo 'Проверка не пройдена!';
}

  1. Use regex Regular Expression to Validate Phone Numbers in PHP
  2. Use the filter Method to Validate Phone Numbers in PHP

Validate Phone Number in PHP

PHP has two ways to validate phone numbers, one is the regular expression regex, and the other is the filter method. We can set a template and validate phone numbers according to that template with regex, but filter will only exclude unwanted characters.

This tutorial demonstrates how to validate different phone numbers in PHP.

Use regex Regular Expression to Validate Phone Numbers in PHP

The preg_match() is a built-in function in PHP that checks if the data is according to the given format; it returns a Boolean value.

Example:

<?php
function validate_number($phone_number){
if(preg_match('/^[0-9]{11}+$/', $phone_number)) {
    // the format /^[0-9]{11}+$/ will check for phone number with 11 digits and only numbers
    echo "Phone Number is Valid <br>";
}   else{
    echo "Enter Phone Number with correct format <br>";
    }
}
//valid phone number with 11 digits
validate_number("03333333333");
//Invalid phone number with 13 digits
validate_number("0333333333333");
// 11 digits number with invalid charachters.
validate_number("03333333-33");
?>

The code above will only validate a phone number with 11 digits only.

Output:

Phone Number is Valid
Enter Phone Number with correct format
Enter Phone Number with correct format

The next example shows how to validate a phone number that begins with a - and includes special characters and country codes.

Example:

<?php
function validate_number($phone_number){
if(preg_match('/^[0-9]{4}-[0-9]{7}$/', $phone_number)){
    // the format /^[0-9]{4}-[0-9]{7}$/ will check for phone number with 11 digits with a - after first 4 digits.
    echo "Phone Number is Valid <br>";
}   else{
    echo "Enter Phone Number with correct format <br>";
   }
}
//Valid phone number with 11 digits and a -
validate_number("0333-3333333");
//Invalid phone number with 13 digits and -
validate_number("0333-333333333");
//Invaild  11 digits number with two -.
validate_number("0333-3333-33");
echo "<br>";

function validate_country_number($phone_number){
if(preg_match('/^+[0-9]{1,2}-[0-9]{3}-[0-9]{7}$/', $phone_number)){
    // the format /^+[0-9]{1,2}-[0-9]{3}-[0-9]{7}$/ will check for phone number with country codes, 11 or 12 digits, + and -
    echo "Phone Number is Valid with country code <br>";
}   else{
    echo "Enter Phone Number with correct format <br>";
   }
}
//Valid phone number with 12 digits + and -. According to the format given in the function for country code.
validate_country_number("+92-333-3333333");
//Invalid phone number with with country code
validate_country_number("+92-333333333333");
//Invaild  Number without country code.
validate_country_number("03333333333");
?>

Output:

Phone Number is Valid
Enter Phone Number with correct format
Enter Phone Number with correct format

Phone Number is Valid with country code
Enter Phone Number with correct format
Enter Phone Number with correct format

It should be mentioned here every country has its format of phone numbers. Any format can be set preg_match regex function to validate a phone number.

Use the filter Method to Validate Phone Numbers in PHP

Filters in PHP are used to validate and sanitize the data inputs. Filters also correct the format and output the correct phone number.

Example:

<?php
function validate_number($phone_number){
$valid_phone_number = filter_var($phone_number, FILTER_SANITIZE_NUMBER_INT);
echo $valid_phone_number."<br>";
}
//valid phone numbers
validate_number("03333333333");
validate_number("0333-3333333");
validate_number("+92-333-3333333");
//invalid phone numbers
validate_number("03333333&333");
validate_number("0333-33*33333");
validate_number("+92-333-333##3333");
?>

The code above uses the built-in function filter_var with the constant FILTER_SANITIZE_NUMBER_INT, which will check for integers with + and - signs. If it detects any other characters, it will exclude them and return the correct phone number.

Output:

03333333333
0333-3333333
+92-333-3333333
03333333333
0333-3333333
+92-333-3333333

The back draws of this method are we cannot set a length for a phone number, and if the + and - are at the wrong places in the number, it will not correct them. The filter method can be used when we mistakenly enter other characters, excluding them.

Это тоже интересно:

  • Проверка иностранных номеров телефонов
  • Прога для проверки номера телефона
  • Проверка водяных счетчиков номера телефонов
  • Прога для пробития номера телефона
  • Проверка ввода номера телефона python

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии