3v4l.org

run code in 300+ PHP versions simultaneously
<?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