Мне нужно RegExp для проверки строк, которые должны состоять из допустимых целых десятичных чисел, включая ноль (0
, 1
, 12
, 123
, но не 00
или 0123
), смешанных со специальным символом (например, x
) в свободных вхождениях:
Примеры допустимых строк:
0
, 1
, 123
, x
, xx
, x0
, 0x
, x0x
, 0x0
, xx123x0
, x1000xx5xxx
, ...
Недопустимые: 00
, x00
, 01
, x01
, ... и практически все, включая неверные числа (начинающиеся с 0
, но не являющиеся нулевыми).
Я придумал следующее:
new RegExp('^0?$|^((?!0)[0-9]+|x0$|0x|x+)+$')
К сожалению, это не работает на 100%, например. допустимая строка не принимается: 0x0
.
Спасибо за любую помощь!
🤔 А знаете ли вы, что...
JavaScript был первоначально создан для улучшения интерактивности веб-страниц.
Я думаю, это то, что вы хотите:
new RegExp('(^0(x\d+)?$)|(^[1-9]\d*$)')
Я получил это регулярное выражение для работы с каждым из ваших примеров:
new RegExp('^(((?<![0-9])([1-9][0-9]*)?[0-9]?)x*)+$')
Я должен отметить, что он основан на «негативном взгляде назад», который может не поддерживаться более старыми средами. Я еще не сталкивался с какими-либо проблемами совместимости при использовании его в современном браузере.
RegExr.com может быть весьма полезен для визуального объяснения каждой части регулярного выражения.
Идея без использования обходных путей:
^\b(?:(?:x|^)(?:0|[1-9]\d*)?)+$
Посмотрите эту демонстрацию на сайте regex101