Если делать корректно - то вам стоит использовать
libphonenumber, есть
её порт на PHP.
Однако если речь идёт о частном случае - то всё можно сделать намного проще:
function formatPhone($phone)
{
$number = preg_replace('/\D+/', '', $phone);
if (strlen($number) === 10) {
$number = '7' . $number;
}
return [
'display' => sprintf('+%s (%s) %s-%s-%s', substr($number, 0, -10), substr($number, -10, 3), substr($number, -7, 3), substr($number, -4, 2),
substr($number, -2, 2)),
'link' => sprintf('tel:+%s', $number),
];
}
$phone = '(495) 123-45-00';
$formatted = formatPhone($phone);
echo "${formatted['display']}\n{$formatted['link']}\n";
Посмотреть вживую можно
здесь.