Удаляем все символы кроме цифр (для телефонной ссылки)

Первый вариант — удалить все символы кроме цифр

Чтобы удалить все символы кроме цифр (для телефонной ссылки), можно воспользоваться регулярными выражениями:

$tel = "+7 (123) 456-7899";
$tel = preg_replace('/[^0-9]/', '', $tel);
echo $tel;

Выведет: 71234567899

Это удобно для автоматического преобразования номера телефона в нужный формат для телефонной ссылки. Например с помощью произвольных полей ACF :

$telefon = get_field('telefon'); //получаем поле с телефоном
$tel = preg_replace('/[^0-9]/', '', $telefon); //преобразуем для ссылки
<a href = "tel:+<?php echo $tel; ?>"><?php echo $telefon; ?></a> //выводим

Второй вариант с сохранением знака «+» если он есть.

function cleanPhoneNumber($phone) { 
  // Сохраняем, если есть в начале знак + 
  $hasPlus = str_starts_with($phone, '+'); 
  // Удаляем все, кроме цифр 
  $digits = preg_replace('/\D+/', '', $phone); 
  // Если был + в начале, добавляем его обратно return 
  $hasPlus ? '+' . $digits : $digits; 
}

примеры:

echo cleanPhoneNumber('+7 (999) 123-45-67'); // +79991234567
echo cleanPhoneNumber('8 (800) 555-35-35'); // 88005553535
echo cleanPhoneNumber('+1-202-555-0191'); // +12025550191

Объяснение:

  • str_starts_with($phone, '+') — проверяет, начинается ли строка с + (доступно с PHP 8.0+).
  • preg_replace('/\D+/', '', $phone) — удаляет всё, что не является цифрой.
  • Если изначально был +, добавляем его в начало.

Если у вас PHP ниже 8.0, можно заменить str_starts_with на substr($phone, 0, 1) === '+'.