Валидация номера телефон с помощью библиотеки libphonenumber-for-php
PHP-библиотека для разбора, форматирования, хранения и проверки международных телефонных номеров. Эта библиотека основана на libphonenumber от Google.
Онлайн демо проверки номера телефона
Библиотека поддерживает версию PHP 5.3 до PHP 8.2 и выше.
Для начало установим библиотеку libphonenumber-for-php в наш проект используя composer
composer require giggsey/libphonenumber-for-php
Подключаем библиотеку в проект сайта, FCPATH путь корневой директории вашего сайта.
include_once(FCPATH.'/vendor/autoload.php'); $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
Начинаем проверку валидации номера, сперва проверим что номер можно использовать с помощью функции isPossibleNumber()
$number = '+41446681800'; $isPossibleNumber = $phoneUtil->isPossibleNumber($number);
isValidNumber — получает объект информации о номере и проверяет номер на валидность, чтобы получить информацию о объекте используем $phoneUtil->parse($number) , возвращает true или false.
Если номер валидный вернем функции номер в формате //+41446681800
$number = '+41446681800'; $isPossibleNumber = $phoneUtil->isPossibleNumber($number); if($isPossibleNumber){ $swissNumberProto = $phoneUtil->parse($number); $isValid = $phoneUtil->isValidNumber($swissNumberProto); if(!$isValid){ $response = array('error' => 'Error!', 'status' => false); } else { $response = array('number' => $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::E164)); } } else { $response = array('error' => 'Error!', 'status' => false); }
Функция checkNumberPhone полностью:
function checkNumberPhone($number) { $response = true; include_once(FCPATH.'/vendor/autoload.php'); $swissNumberStr = $number; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $isPossibleNumber = $phoneUtil->isPossibleNumber($number); if($isPossibleNumber){ $swissNumberProto = $phoneUtil->parse($number); $isValid = $phoneUtil->isValidNumber($swissNumberProto); if(!$isValid){ $response = array('error' => 'Error!', 'status' => false); } else { $response = array('number' => $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::E164)); } } else { $response = array('error' => 'Error!', 'status' => false); } } catch (\libphonenumber\NumberParseException $e) { error_log(print_r($e, true)); } return $response; }