<?php
/**
* Created by PhpStorm.
* User: Martin Jirásek <martin.jirasek@nms.cz>
* Date: 31.03.2017
* Time: 12:41
*/
class PhoneNumberValidator
{
const PREFIX_SYMBOL_ZEROS = '00';
const PREFIX_SYMBOL_PLUS = '+';
private static $prefixSymbols = [
self::PREFIX_SYMBOL_ZEROS,
self::PREFIX_SYMBOL_PLUS,
];
/**
* @return array
*/
public static function internationalPrefixNumbers()
{
return [
'420', // cz
'421', // sk
];
}
/**
* @param $phoneNumber
* @return string
*/
public static function getPhoneNumberBase($phoneNumber)
{
return substr($phoneNumber, 0, -9);
}
/**
* @param $phoneNumber
* @return array|bool
*/
public static function getRecognizedCountryPrefixes($phoneNumber)
{
$prefixes = [];
$prefixPart = self::getPhoneNumberBase($phoneNumber);
$internationalPrefixNumbers = self::internationalPrefixNumbers();
if (strlen($prefixPart) <= min(array_map('strlen', $internationalPrefixNumbers))) {
return false;
}
foreach ($internationalPrefixNumbers as $prefix) {
if (!$prefixPart || strpos($prefixPart, $prefix) !== false) {
foreach (self::$prefixSymbols as $prefixType) {
$prefixes[] = $prefixType . $prefix;
}
}
}
return $prefixes;
}
/**
* @param $phoneNumber
* @return array|bool
*/
public static function getPhoneNumberInAllPossibleForms($phoneNumber)
{
$prefixes = self::getRecognizedCountryPrefixes($phoneNumber);
if ($prefixes === false) {
return false;
}
$forms = [];
foreach ($prefixes as $prefix) {
$forms[] = $prefix . self::getPhoneNumberBase($phoneNumber);
}
return $forms;
}
/**
* @param $phoneNumber
* @return bool|string
*/
public static function convertToRightForm($phoneNumber)
{
$forms = self::getPhoneNumberInAllPossibleForms($phoneNumber);
if ($forms === false) {
return false;
}
foreach ($forms as $form) {
if (substr($form, 0, strlen(self::PREFIX_SYMBOL_PLUS)) === self::PREFIX_SYMBOL_PLUS) {
return $form;
}
}
return false;
}
/**
* @param $phoneNumber
* @return bool
*/
public static function isValid($phoneNumber)
{
if (!$phoneNumber) {
return false;
}
$recognizedCountryPrefixes = self::getRecognizedCountryPrefixes($phoneNumber);
if ($recognizedCountryPrefixes === false) {
return false;
}
$regexPrefixes = array_map(function ($value) {
return strpos($value, '+') !== false ? "\\$value" : $value; // escape for regex
}, $recognizedCountryPrefixes);
return (bool) preg_match('~^(' . implode('|', $regexPrefixes) . ')' /*. '?' */. '[0-9]{9}$~', $phoneNumber);
}
}
var_dump('getPhoneNumberBase');
var_dump(PhoneNumberValidator::getPhoneNumberBase("608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberBase("0608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberBase("421608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberBase("+421608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberBase("00421608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberBase("+420608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberBase("00420608171262"));
var_dump('isValid');
var_dump(PhoneNumberValidator::isValid("608171262"));
var_dump(PhoneNumberValidator::isValid("0608171262"));
var_dump(PhoneNumberValidator::isValid("420608171262"));
var_dump(PhoneNumberValidator::isValid("+421608171262"));
var_dump(PhoneNumberValidator::isValid("00421608171262"));
var_dump(PhoneNumberValidator::isValid("+420608171262"));
var_dump(PhoneNumberValidator::isValid("00420608171262"));
var_dump('getRecognizedCountryPrefixes');
var_dump(PhoneNumberValidator::getRecognizedCountryPrefixes("608171262"));
var_dump(PhoneNumberValidator::getRecognizedCountryPrefixes("0608171262"));
var_dump(PhoneNumberValidator::getRecognizedCountryPrefixes("420608171262"));
var_dump(PhoneNumberValidator::getRecognizedCountryPrefixes("+421608171262"));
var_dump(PhoneNumberValidator::getRecognizedCountryPrefixes("00421608171262"));
var_dump(PhoneNumberValidator::getRecognizedCountryPrefixes("+420608171262"));
var_dump(PhoneNumberValidator::getRecognizedCountryPrefixes("00420608171262"));
var_dump('getPhoneNumberInAllPossibleForms');
var_dump(PhoneNumberValidator::getPhoneNumberInAllPossibleForms("608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberInAllPossibleForms("0608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberInAllPossibleForms("420608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberInAllPossibleForms("+421608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberInAllPossibleForms("00421608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberInAllPossibleForms("+420608171262"));
var_dump(PhoneNumberValidator::getPhoneNumberInAllPossibleForms("00420608171262"));
var_dump('convertToRightForm');
var_dump(PhoneNumberValidator::convertToRightForm("608171262"));
var_dump(PhoneNumberValidator::convertToRightForm("0608171262"));
var_dump(PhoneNumberValidator::convertToRightForm("420608171262"));
var_dump(PhoneNumberValidator::convertToRightForm("+421608171262"));
var_dump(PhoneNumberValidator::convertToRightForm("00421608171262"));
var_dump(PhoneNumberValidator::convertToRightForm("+420608171262"));
var_dump(PhoneNumberValidator::convertToRightForm("00420608171262"));
preferences:
53.15 ms | 402 KiB | 5 Q