diff --git a/includes/class-phone-parser.php b/includes/class-phone-parser.php new file mode 100644 index 0000000..e5b7dc9 --- /dev/null +++ b/includes/class-phone-parser.php @@ -0,0 +1,72 @@ + 15) { + continue; + } + + $e164 = '+' . $digits; + $is_ru = (strlen($digits) === 11 && $digits[0] === '7'); + + return [ + 'e164' => $e164, + 'pretty' => self::format_pretty($e164, $is_ru), + 'is_russian' => $is_ru, + ]; + } + + return null; + } + + private static function format_pretty(string $e164, bool $is_ru): string + { + if ($is_ru) { + // +7 XXX XXX-XX-XX → "+7 (XXX) XXX-XX-XX" + $d = substr($e164, 2); + return sprintf( + '+7 (%s) %s-%s-%s', + substr($d, 0, 3), + substr($d, 3, 3), + substr($d, 6, 2), + substr($d, 8, 2) + ); + } + return $e164; + } +} diff --git a/tests/PhoneParserTest.php b/tests/PhoneParserTest.php new file mode 100644 index 0000000..010553e --- /dev/null +++ b/tests/PhoneParserTest.php @@ -0,0 +1,75 @@ +