08d51eb6c8
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
27 lines
675 B
PHP
27 lines
675 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Support;
|
|
|
|
final class PhoneNormalizer
|
|
{
|
|
/**
|
|
* Нормализует российский номер к виду +7XXXXXXXXXX (12 символов) или null, если невалиден.
|
|
*/
|
|
public static function normalize(string $raw): ?string
|
|
{
|
|
$digits = preg_replace('/\D+/', '', $raw) ?? '';
|
|
|
|
if (strlen($digits) === 11 && ($digits[0] === '8' || $digits[0] === '7')) {
|
|
$digits = '7'.substr($digits, 1);
|
|
} elseif (strlen($digits) === 10) {
|
|
$digits = '7'.$digits;
|
|
} else {
|
|
return null;
|
|
}
|
|
|
|
return '+'.$digits;
|
|
}
|
|
}
|