Как составить regex для проверки строки на числа
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для того, чтобы проверить являются ли все символы в строке цифрами, можно использовать регулярное выражение ^\d+$
. Этот шаблон прост, эффективен и подходит для строк, состоящих только из цифр.
const binaryHello = /^\d+$/.test('01101000011001010110110001101100011011110010000001110111011011110111001001101100'); // true
const regularHello = /^\d+$/.test('Hello World!'); // false – в этой строке присутствуют буквы, не принадлежащие к двоичному коду.
Чтобы допускать также и пустые строки, используйте ^\d*$
.
Разбор компонентов регулярного выражения
Объяснение квантификаторов звёздочка * и плюс +
Используйте ^\d*$
для поиска нуля или более цифр в строке, включая возможные пустые строки. Если строка должна содержать как минимум одну цифру и не может быть пустой, выберите ^\d+$
.
Учитываемость десятичных точек и знаков
Включив возможные знаки и десятичные точки в регулярное выражение, получаем: /^-?\d*\.?\d*$/
. Чтобы исключить пустые строки, следует изменить шаблон на /^-?\d+\.?\d*$/
.
Работа с различными числовыми форматами
Целые числа и десятичные дроби
Шаблон ^\d+\.?\d*$
подойдет для проверки как целых чисел, так и десятичных дробей, охватывая различные числовые значения.
Нетипичные числа: валюты, проценты и прочее
Сложные числовые форматы, такие как валюты или проценты, требуют более подробно разработанных регулярных выражений, чтобы точно соответствовать ожидаемому формату.
Визуализация
Можно представить проверку строки на содержание исключительно цифр, подобно таможенному контролю:
Строка: "12345Abc678"
Контрольный пункт: **Патруль Regex** (`^\d+$`)
Пропустят дальше только цифры:
До контроля: 🛄✈️🎒🧳💼 (различные символы)
После контроля: 🛄✈️ (Только цифры, если они присутствовали)
Результаты проверки:
**Соответствует**: "1234567890" ✅ (Добро пожаловать на борт!)
**Не соответствует**: "123ABC" ❌ (К сожалению, буквы на борт не допускаются.)
Патруль Regex (🛃) строго следит за тем, чтобы в строке присутствовали лишь цифры (0-9).
Практическое использование и распространенные случаи
Работа с числами, состоящими из нескольких цифр
Исходный шаблон ^[0-9]$
не подойдет для многозначных чисел, в отличие от ^[0-9]+$
или его аналога ^\d+$
, который верно проверяет числа любой длины.
Работа с десятичными дробями и знаками
В тех случаях, когда десятичные дроби и знаки не обязательны, шаблоны вида ^-?\d+\.?\d*$
будут наиболее подходящими.
Удаление ведущих нулей
Для предотвращения наличия лидирующих нулей, например, "007", используйте шаблон ^[1-9]\d*$
, который гарантирует начало строки с цифры, отличной от нуля.
Требуется осторожность при использовании: возможные подводные камни и сложности
Ведущие нули могут вводить в заблуждение
Будьте внимательны к лидирующим нулям. Regex ^\d+$
допустит "007", что может быть нежелательно в некоторых случаях. В таких ситуациях следует использовать специализированные шаблоны.
Флаги влияют на результат
При использовании метода .test()
флаг глобального поиска (g) может приводить к неожиданным результатам, так как поиск будет начинаться с индекса последнего совпадения.
Дилемма с пустой строкой
Является ли пустая строка (""
) числом? Этот вопрос может быть критически важным в определённых условиях.
Полезные материалы
- Регулярные выражения – JavaScript | MDN — подробное руководство по работе с регулярными выражениями в JavaScript.
- RegExp.prototype.test() – JavaScript | MDN — описание метода
test
. - JavaScript RegExp Reference — справочник по объекту RegExp в JavaScript, включая примеры и объяснения.
- Шаблоны и флаги — вводное руководство по шаблонам и флагам регулярных выражений в JavaScript.
- RegExr: Создание, тестирование и обучение использованию регулярных выражений — интерактивный инструмент для изучения регулярных выражений.
- regex101: Создание, тестирование и отладка регулярных выражений — онлайн инструмент для тестирования и отладки регулярных выражений.
- javascript – Как проверить, содержит ли строка только цифры – Stack Overflow — полезные обсуждения и решения для проверки строк на состав из цифр.