JS удалить все кроме цифр: простые способы с примерами кода
-
Часто в JavaScript нужно очистить строку от всего лишнего - оставить только цифры. Это полезно для обработки пользовательского ввода, телефонов, цен или ID. Такие задачи возникают при валидации форм или парсинге данных.
Метод работает быстро и надежно с помощью регулярных выражений. Вы получите чистые числа без букв, пробелов и символов. Разберем основные подходы шаг за шагом.
Основной метод: replace с регуляркой
Метод string.replace() - это стандартный инструмент в JS для замены символов. Для удаления всего кроме цифр используем регулярное выражение
/[^0-9]/g. Первый символ^внутри скобок значит ‘не’,0-9- диапазон цифр,g- глобальный поиск по всей строке.Возьмем пример: строка “Телефон: +7 (999) 123-45-67”. После обработки останется “79991234567”. Это идеально для номеров карт, дат или счетчиков. Такой подход универсален и работает в любом браузере.
- Простой код:
const str = "Телефон: +7 (999) 123-45-67"; const onlyDigits = str.replace(/[^0-9]/g, ""); console.log(onlyDigits); // "79991234567"- Флаг
gобязателен - без него заменится только первый символ. - Работает с русскими буквами, эмодзи и спецсимволами - все уйдет.
Исходная строка Результат Длина до Длина после “Цена 1 234 руб.” “1234” 15 4 “+7-999-123-45-67” “79991234567” 14 11 “abc123def” “123” 7 3 Альтернатива: \D для нецифр
Регулярка
\D- это сокращение для ‘любой нецифровой символ’. Она эквивалентна/[^0-9]/gи часто короче. Метод replace с\D/gудаляет буквы, пробелы, знаки препинания.Пример: “Абра23кадабра” превратится в “23”. Полезно в скриптах, где строка приходит из API или формы. Обратите внимание:
\Dне различает Unicode-цифры, но для латиницы и кириллицы работает идеально.- Код с \D:
const text = "Абра23кадабра"; const nums = text.replace(/\D/g, ""); console.log(nums); // "23"- Поддерживает многострочные строки с флагом
m. - Быстрее на больших текстах, чем ручной цикл.
Таблица сравнения:
Регулярка Полное написание Преимущества Когда использовать /[^0-9]/gлюбой кроме 0-9 Явно, понятно новичкам Обучение, документация /\D/gлюбой нецифра Коротко, быстро Производительный код Расширенные случаи: цифры + допсимволы
Иногда нужны не только цифры, но и тире или точки - для телефонов, дат. Изменяем регулярку:
/[^0-9-]/gоставит цифры и дефис. Это решает задачу для строк вроде “123-45-67”.Пример из практики: обработка адресов или кодов. Строка “код-123-abc-456” станет “123-456”. Нюанс: флаг
iигнорирует регистр, но для цифр не нужен.- С тире:
const code = "код-123-abc-456"; const clean = code.replace(/[^0-9-]/g, ""); console.log(clean); // "123-456"- Для цифр, букв и пробелов:
/[^0-9a-zа-яё\s]/gi. - Unicode-цифры: используйте
/[^\p{N}]/guв современных браузерах.
Задача Регулярка Пример результата Только цифры /[^0-9]/g“123” Цифры + тире /[^0-9-]/g“123-456” Цифры + точка /[^0-9.]/g“123.45” Функция для повторного использования
Создайте универсальную функцию, чтобы не писать код каждый раз. Она принимает строку и опциональный паттерн. Возвращает очищенный результат или ошибку.
Функция упрощает работу в проектах: вызываете один раз для формы, API или валидации. Пример: проверка номера карты перед отправкой. Важно: всегда проверяйте входные данные на null.
function extractDigits(str, pattern = /[^0-9]/g) { if (typeof str !== 'string') return ''; return str.replace(pattern, ''); } console.log(extractDigits("+7 (999) 123-45-67")); // "79991234567"- Добавьте проверку длины:
if (result.length < 10) return null;. - Для массивов:
array.map(extractDigits).
Масштабирование на реальные проекты
В больших приложениях комбинируйте с другими методами: trim(), parseInt(). Для React/Vue - используйте в onChange хендлерах. Решает проблемы с данными из внешних источников.
Остается место для оптимизаций: кэшируйте RegExp как
const digitsRegex = /[^0-9]/g;. Подумать стоит над обработкой отрицательных чисел или десятичных дробей в будущем.
© 2024 - 2026 ExLends, Inc. Все права защищены.