@ 2017-03-31T15:28:51Z <?php
/**
* Created by PhpStorm.
* User: Martin Jirásek <martin.jirasek@nms.cz>
* Date: 31.03.2017
* Time: 12:41
*/
class PhoneNumberManager
{
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"));
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.4 , 8.3.6 string(18) "getPhoneNumberBase"
Fatal error: Uncaught Error: Class "PhoneNumberValidator" not found in /in/VZjsN:121
Stack trace:
#0 {main}
thrown in /in/VZjsN on line 121
Process exited with code 255 . Output for 8.3.5 Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
string(18) "getPhoneNumberBase"
Fatal error: Uncaught Error: Class "PhoneNumberValidator" not found in /in/VZjsN:121
Stack trace:
#0 {main}
thrown in /in/VZjsN on line 121
Process exited with code 255 . Output for 7.0.0 - 7.0.33 , 7.1.0 - 7.1.33 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 string(18) "getPhoneNumberBase"
Fatal error: Uncaught Error: Class 'PhoneNumberValidator' not found in /in/VZjsN:121
Stack trace:
#0 {main}
thrown in /in/VZjsN on line 121
Process exited with code 255 . Output for 5.6.0 - 5.6.40 string(18) "getPhoneNumberBase"
Fatal error: Class 'PhoneNumberValidator' not found in /in/VZjsN on line 121
Process exited with code 255 . preferences:dark mode live preview
270.17 ms | 401 KiB | 288 Q