Оставить только цифры в строке: регулярки для JS и PHP с примерами
-
Часто в разработке приходится чистить строки от всего лишнего, оставляя только цифры. Это нужно для обработки номеров телефонов, цен или ID из пользовательского ввода. Регулярные выражения в JavaScript и PHP решают задачу одной строкой кода.
Такие приёмы экономят время и упрощают валидацию данных. Мы разберём базовые шаблоны, примеры и нюансы для обеих платформ. В итоге вы сможете быстро применять их в проектах без лишних библиотек.
Регулярка для JavaScript: простая очистка строки
В JavaScript метод
replace()с регулярным выражением удаляет все символы кроме цифр. Основной шаблон —/[^0-9]/g, где^внутри скобок значит “не”, а0-9— диапазон цифр. Флагgобеспечивает замену всех вхождений, без него сработает только первое.Возьмём номер телефона:
'+7 (910) 343-23-54'. Послеreplace(/[^0-9]/g, '')получится'79103432354'. Это удобно для форм, где пользователь вводит лишние символы. Такой подход работает везде — в браузере или Node.js, без дополнительных настроек.- Базовый шаблон:
/[^0-9]/g— удаляет всё кроме цифр 0–9. - С флагом i:
/[^0-9]/gi— игнорирует регистр, но для цифр не актуально. - Альтернатива с \d:
/[^\d]/g— то же самое, \d значит цифру.
Исходная строка Регулярка Результат ‘+7 (910) 343-23-54’ /[^0-9]/g‘79103432354’ ‘A1B2C3’ /[^\d]/g‘123’ ‘Цена: 1 234 руб.’ /[^0-9]/g‘1234’ Нюанс: Если нужны только русские цифры или Unicode, используйте
/[^\p{N}]/guв современных движках.Регулярка для PHP: preg_replace в действии
В PHP функция
preg_replace()аналогично чистит строки. Шаблон/[^0-9]/без флагаg, так как функция по умолчанию заменяет все вхождения. Разделители — слеши/, внутри[^0-9]— всё кроме цифр, заменяем на пустую строку''.Пример:
$str = "A()bs23 + 456 Проверка"; echo preg_replace('/[^0-9]/', '', $str);выдаст23456. Это идеально для парсинга пользовательских данных или баз. Функция работает с PCRE, поддерживает Unicode с модификаторомu.- Стандартный вызов:
preg_replace('/[^0-9]/', '', $str)— базовая очистка. - С диапазоном:
preg_replace('/[^0-7]/', '', $str)— оставит только 0–7. - Проверка на наличие:
preg_match('/\d/', $str)— есть ли хоть одна цифра.
Пример кода Вход Выход preg_replace('/[^0-9]/', '', $str)‘от 1200 руб.’ ‘1200’ preg_replace('/[^\d]/', '', $str1)‘1 200 р + торг’ ‘1200’ preg_replace('/[^0-9]/u', '', $str)‘Цена 1234’ ‘1234’ (с u для Unicode) Важно: Всегда экранируйте слеши, если они в строке, и проверяйте результат на пустоту.
Сравнение подходов JS и PHP
Оба языка используют похожий синтаксис PCRE, но с разными функциями. В JS — это
string.replace(regexp, ''), глобальный поиск черезg. В PHP —preg_replace(pattern, '', $str), глобальность по умолчанию. Выбор зависит от контекста: фронтенд или бэкенд.Для униформности можно вынести шаблон в константу. В JS флаги ставятся в конце (
/pattern/g), в PHP — после разделителя (/pattern/g). Оба поддерживают\dкак shorthand для цифр, что короче[0-9].Аспект JavaScript PHP Функция str.replace(/[^0-9]/g, '')preg_replace('/[^0-9]/', '', $str)Глобальность Флаг gобязателенПо умолчанию Unicode /[^\p{N}]/gu/[^0-9]/uПроверка str.match(/\d/)preg_match('/\d/', $str)- Когда JS: Маски ввода, валидация форм на клиенте.
- Когда PHP: Обработка POST-данных, парсинг логов.
- Кросс-платформа: Шаблон
/[^0-9]/gработает идентично.
Производительность: Для длинных строк JS быстрее, PHP — с кэшированием шаблона через
preg_replace_callback.Вариации и продвинутые шаблоны
Иногда нужны не все цифры, а только в диапазоне или с точками. Для версии вроде ‘1.2.3’ используйте
/[^0-9\.]/g. Это оставит цифры и точки. Ещё вариант —/\d+/gдля извлечения групп цифр в массив.В реальных задачах встречаются пробелы или дефисы в номерах: ‘1 234-56’. Шаблон
/[^0-9\s-]/gуберёт остальное. Для телефонов популярно нормализовать до E.164 формата. Тестируйте на edge-кейсах вроде пустой строки или только букв./[^0-9\.]/g— цифры + точки для версий./\d{3}/g— группы по 3 цифры./\d+/g.match(str)— массив всех чисел.
Сценарий Шаблон JS Шаблон PHP Только цифры /[^0-9]/g/[^0-9]/Цифры + точки /[^0-9\.]/g/[^0-9\.]/Только 0-5 /[^0-5]/g/[^0-5]/Совет: Для сложных случаев комбинируйте с
split()илиfilter().Шаблоны для мобильной валидации и API
В мобильных apps или API часто чистят JSON-ответы. В React Native или Flutter (с JS-bridging) те же регулярки. Для API — валидация на сервере PHP перед сохранением. Это предотвращает инъекции и ошибки БД.
Представьте ввод: ‘8909-123-45-67’. После очистки — чистый номер для базы. Тестируйте на кириллице: ‘восемь910’ с
/[^0-9]/u. Оба языка справляются с многобайтовыми строками при правильных флагах.Тонкости с отрицанием и границами
Ключ — отрицание
[^...], оно исключает символы из класса. Добавьте^и$для полной строки:/^[0-9]+$/— проверка, что строка состоит только из цифр. Без них — просто очистка.Это полезно для валидации:
if (str.match(/^[0-9]+$/)) { ... }. В PHP аналогичноpreg_match('/^[0-9]+$/', $str). Разница в экранировании: JS не требует для слешей в строке.Практика на грани: числа с разделителями
Когда цифры с пробелами или запятыми, как ‘1,234.56’. Шаблон
/[^0-9,\.]/gоставит их. Потом парситеparseFloat(result.replace(',', '')). Для валют — комбинируйте регулярки сnumber_format()в PHP.Вход Шаблон Результат ‘1,234 руб.’ /[^0-9]/g‘1234’ ‘1.234,56 €’ /[^0-9\.]/g‘1.23456’ Вывод: Экспериментируйте с
RegExp.test()для быстрой проверки.Масштабирование: от простого к сложному
Начните с базовой
/[^0-9]/, добавляйте символы в класс. Для телефонов —/[^0-9+]/g. Тестируйте в консоли браузера или php онлайн. Это база, на которой строится сложный парсинг.Ограничения: регулярки не для вложенных структур, там лучше парсеры. Но для строк — идеал скорости и простоты. Подумать стоит над обработкой очень длинных строк или интеграцией в фреймворки вроде Laravel/Vue.
- Базовый шаблон:
© 2024 - 2025 ExLends, Inc. Все права защищены.