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"));

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0160.00616.88
8.3.50.0070.01116.73
8.3.40.0190.00319.23
8.3.30.0130.00319.14
8.3.20.0130.00720.29
8.3.10.0140.00722.04
8.3.00.0110.00721.77
8.2.180.0120.00318.66
8.2.170.0170.00322.96
8.2.160.0110.00419.59
8.2.150.0170.00324.18
8.2.140.0070.01024.66
8.2.130.0040.00422.39
8.2.120.0060.00326.35
8.2.110.0050.00519.33
8.2.100.0040.00818.34
8.2.90.0030.00619.34
8.2.80.0040.00418.00
8.2.70.0050.00517.88
8.2.60.0040.00418.29
8.2.50.0050.00318.18
8.2.40.0080.00020.73
8.2.30.0030.00619.34
8.2.20.0040.00418.23
8.2.10.0040.00418.18
8.2.00.0060.00318.44
8.1.280.0130.00925.92
8.1.270.0080.00021.95
8.1.260.0190.00026.35
8.1.250.0070.01128.09
8.1.240.0090.00023.84
8.1.230.0060.00617.63
8.1.220.0040.00417.77
8.1.210.0070.00318.77
8.1.200.0040.00417.61
8.1.190.0050.00317.47
8.1.180.0060.00318.10
8.1.170.0060.00318.96
8.1.160.0040.00419.10
8.1.150.0040.00420.42
8.1.140.0050.00319.71
8.1.130.0050.00219.16
8.1.120.0040.00417.76
8.1.110.0000.00817.72
8.1.100.0060.00317.73
8.1.90.0000.01117.73
8.1.80.0000.00717.73
8.1.70.0040.00417.62
8.1.60.0000.00917.79
8.1.50.0030.00617.73
8.1.40.0080.00417.65
8.1.30.0030.00617.90
8.1.20.0080.00017.82
8.1.10.0050.00317.86
8.1.00.0050.00317.83
8.0.300.0030.00618.77
8.0.290.0050.00317.00
8.0.280.0040.00418.59
8.0.270.0040.00417.36
8.0.260.0070.00017.41
8.0.250.0090.00017.15
8.0.240.0000.00817.06
8.0.230.0050.00217.23
8.0.220.0000.00817.22
8.0.210.0030.00517.02
8.0.200.0000.00817.25
8.0.190.0040.00417.13
8.0.180.0040.00417.18
8.0.170.0000.00817.25
8.0.160.0080.00017.30
8.0.150.0000.00717.13
8.0.140.0000.00717.04
8.0.130.0070.00013.59
8.0.120.0000.00817.14
8.0.110.0000.00817.21
8.0.100.0080.00016.99
8.0.90.0000.00817.06
8.0.80.0040.01517.14
8.0.70.0030.00617.15
8.0.60.0040.00417.08
8.0.50.0000.00817.07
8.0.30.0060.01417.29
8.0.20.0150.00817.51
8.0.10.0000.00717.24
8.0.00.0140.01017.07
7.4.330.0000.00515.55
7.4.320.0070.00016.84
7.4.300.0030.00316.84
7.4.290.0000.00716.85
7.4.280.0040.00416.89
7.4.270.0000.00816.75
7.4.260.0030.00716.93
7.4.250.0000.00716.95
7.4.240.0040.00417.00
7.4.230.0000.00717.05
7.4.220.0070.01116.83
7.4.210.0070.01416.84
7.4.200.0040.00416.75
7.4.160.0110.00816.75
7.4.150.0070.01317.40
7.4.140.0110.01417.86
7.4.130.0060.01316.86
7.4.120.0110.01216.82
7.4.110.0070.01416.67
7.4.100.0160.00816.90
7.4.90.0180.00917.02
7.4.80.0070.01119.39
7.4.70.0070.01016.89
7.4.60.0070.01016.80
7.4.50.0040.01116.70
7.4.40.0040.01516.88
7.4.30.0100.00716.77
7.4.00.0030.01315.24
7.3.330.0000.00613.61
7.3.320.0000.00613.49
7.3.310.0030.00316.66
7.3.300.0040.00416.61
7.3.290.0110.00816.64
7.3.280.0090.01016.65
7.3.270.0070.01317.40
7.3.260.0100.00816.81
7.3.250.0080.01116.93
7.3.240.0090.01216.84
7.3.230.0140.00516.97
7.3.210.0040.01616.83
7.3.200.0180.00016.61
7.3.190.0120.00616.80
7.3.180.0030.01416.95
7.3.170.0170.00016.86
7.3.160.0150.00316.69
7.3.120.0110.01115.16
7.3.110.0120.00814.86
7.3.100.0070.00315.21
7.3.90.0060.00615.18
7.3.80.0030.01015.10
7.3.70.0040.01215.04
7.3.60.0040.00815.02
7.3.50.0050.00514.85
7.3.40.0080.00614.94
7.3.30.0000.01414.81
7.3.20.0080.00316.80
7.3.10.0100.00616.71
7.3.00.0070.00316.97
7.2.330.0120.00616.90
7.2.320.0160.00717.01
7.2.310.0070.01716.99
7.2.300.0100.01017.07
7.2.290.0170.00016.88
7.2.250.0120.00615.35
7.2.240.0120.01215.57
7.2.230.0030.00915.52
7.2.220.0000.01515.14
7.2.210.0040.01115.23
7.2.200.0110.00415.48
7.2.190.0070.00715.13
7.2.180.0000.01715.21
7.2.170.0110.00615.34
7.2.60.0040.00917.20
7.1.330.0070.01016.06
7.1.320.0070.00716.19
7.1.310.0040.01215.77
7.1.300.0080.00315.89
7.1.290.0030.00915.64
7.1.280.0060.00315.86
7.1.270.0120.00316.12
7.1.260.0030.01016.13
7.1.200.0030.01015.66
7.1.70.0050.00517.35
7.1.60.0080.00417.52
7.1.30.0130.06736.58
7.1.20.4800.06736.53
7.1.10.0100.06320.47
7.1.00.5970.09020.47
7.0.200.0050.00516.70
7.0.170.4470.06020.15
7.0.160.4070.06320.18
7.0.150.0130.05320.15
7.0.140.7570.07320.01
7.0.130.3970.06020.11
7.0.120.3730.06720.13
7.0.110.4800.05720.13
7.0.100.3670.06720.12
7.0.90.4630.08320.11
7.0.80.3970.06320.09
7.0.70.3470.04320.17
7.0.60.3470.05720.04
7.0.50.3700.05720.26
7.0.40.3500.07720.16
7.0.30.3230.06320.06
7.0.20.4070.08020.12
7.0.10.4630.08019.95
7.0.00.2900.08320.11

preferences:
63.44 ms | 401 KiB | 5 Q