Очистка строки от лишних символов: оставить цифры

PHP эквивалент JavaScript выражения value.replace(/\D/g, '')

В PHP аналогом JavaScript выражения value.replace(/\D/g, '') является использование функции preg_replace().​

Синтаксис

PHP
$result = preg_replace('/\D/', '', $value);

или

PHP
$result = preg_replace('/[^0-9]/', '', $value);

Объяснение

JavaScript выражение value.replace(/\D/g, '') удаляет все нецифровые символы из строки. В PHP:​

  • \D — метасимвол регулярного выражения, который совпадает со всеми символами, кроме цифр (эквивалентно [^0-9])​
  • preg_replace() — функция PHP для поиска и замены по регулярному выражению​
  • Первый параметр — шаблон регулярного выражения для поиска
  • Второй параметр — строка замены (пустая строка '' для удаления)
  • Третий параметр — исходная строка

Практические примеры

Пример 1: Удаление всех нецифровых символов

PHP
<?php
$phone = "+(123) 456-78-90";
$cleaned = preg_replace('/\D/', '', $phone);
echo $cleaned; // Выводит: 12345678901
?>

Пример 2: Альтернативный синтаксис

PHP
<?php
$string = "Hello 123 World 456";
$numbers = preg_replace('/[^0-9]/', '', $string);
echo $numbers; // Выводит: 123456
?>

Пример 3: Очистка денежного значения

PHP
<?php
$price = "$123.45";
$digits = preg_replace('/\D/', '', $price);
echo $digits; // Выводит: 12345
?>

Различия с JavaScript

В отличие от JavaScript, где нужно указывать флаг g (global) для замены всех вхождений, функция preg_replace() в PHP по умолчанию заменяет все совпадения, поэтому добавлять модификатор /g не требуется.​

Альтернативные варианты записи

Все эти выражения дают одинаковый результат:

PHP
// Вариант 1: с метасимволом \D
preg_replace('/\D/', '', $value);

// Вариант 2: с отрицанием класса символов
preg_replace('/[^0-9]/', '', $value);

// Вариант 3: с \W (удаляет все неалфавитно-цифровые)
preg_replace('/[\W]/', '', $value);

Для многих задач оптимальным решением будет использование preg_replace('/\D/', '', $value) — это прямой эквивалент JavaScript кода.​

Если нужно оставить точку или запятую — дробное число

Если нужно удалить все символы, кроме цифр, точки и запятой, чтобы оставить возможность хранить вещественные числа (например, 12.34 или 12,34), можно использовать немного изменённое регулярное выражение с preg_replace().

Пример PHP кода

PHP
<?php
$value = "Цена: 1,234.56 USD";
$clean = preg_replace('/[^0-9.,]/', '', $value);
echo $clean; // Результат: 1,234.56
?>

Такой шаблон /[^0-9.,]/ удаляет всё, кроме цифр (0–9), точки (.) и запятой (,).​


Если нужно корректно преобразовать строку в число

Иногда после очистки понадобится привести строку к числу с плавающей запятой. В этом случае важно различать локали:

  • если используется точка как разделитель (12.34), достаточно floatval($clean);
  • если запятая (12,34), её нужно заменить на точку перед преобразованием:
PHP
<?php
$value = "12,34";
$clean = preg_replace('/[^0-9.,]/', '', $value);
$float = floatval(str_replace(',', '.', $clean));
echo $float; // 12.34
?>

Для чисел с разделителями тысяч

Если могут встречаться такие форматы, как 1.234,56 (европейский стиль), то можно дополнительно удалить точки, оставив запятую как десятичный разделитель :​

PHP
<?php
$value = "1.234,56";
$clean = preg_replace('/[^0-9,]/', '', $value); // оставляем только цифры и запятую
$float = floatval(str_replace(',', '.', $clean)); // заменяем запятую на точку
echo $float; // 1234.56
?>

Итого

ЦельРегулярное выражениеПример результата
Только цифры/\D/1234
Цифры + точка, запятая/[^0-9.,]/1,234.56
Только цифры + запятая/[^0-9,]/1234,56

Такое решение корректно работает для парсинга денежных сумм и чисел с десятичными разделителями в PHP, полностью аналогично value.replace(/[^\d.,]/g, '') в JavaScript.​