Очистка строки от лишних символов: оставить цифры
PHP эквивалент JavaScript выражения value.replace(/\D/g, '')
В PHP аналогом JavaScript выражения value.replace(/\D/g, '') является использование функции preg_replace().
Синтаксис
$result = preg_replace('/\D/', '', $value);или
$result = preg_replace('/[^0-9]/', '', $value);Объяснение
JavaScript выражение value.replace(/\D/g, '') удаляет все нецифровые символы из строки. В PHP:
\D— метасимвол регулярного выражения, который совпадает со всеми символами, кроме цифр (эквивалентно[^0-9])preg_replace()— функция PHP для поиска и замены по регулярному выражению- Первый параметр — шаблон регулярного выражения для поиска
- Второй параметр — строка замены (пустая строка
''для удаления) - Третий параметр — исходная строка
Практические примеры
Пример 1: Удаление всех нецифровых символов
<?php
$phone = "+(123) 456-78-90";
$cleaned = preg_replace('/\D/', '', $phone);
echo $cleaned; // Выводит: 12345678901
?>Пример 2: Альтернативный синтаксис
<?php
$string = "Hello 123 World 456";
$numbers = preg_replace('/[^0-9]/', '', $string);
echo $numbers; // Выводит: 123456
?>Пример 3: Очистка денежного значения
<?php
$price = "$123.45";
$digits = preg_replace('/\D/', '', $price);
echo $digits; // Выводит: 12345
?>Различия с JavaScript
В отличие от JavaScript, где нужно указывать флаг g (global) для замены всех вхождений, функция preg_replace() в PHP по умолчанию заменяет все совпадения, поэтому добавлять модификатор /g не требуется.
Альтернативные варианты записи
Все эти выражения дают одинаковый результат:
// Вариант 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
$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
$value = "12,34";
$clean = preg_replace('/[^0-9.,]/', '', $value);
$float = floatval(str_replace(',', '.', $clean));
echo $float; // 12.34
?>Для чисел с разделителями тысяч
Если могут встречаться такие форматы, как 1.234,56 (европейский стиль), то можно дополнительно удалить точки, оставив запятую как десятичный разделитель :
<?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.