Я пытаюсь написать регулярное выражение, которое может соответствовать вводу числовой строки, которая должна быть в диапазоне
-50 to 100000000
Я пробовал выражение вроде
^(-?)(1000|[0-9][0-9][0-9]?)$
но он соответствует только числам от -1000 до 1000.
пример для проверки прост
-50
-39
9
1000
36900
2000022
Пожалуйста, помогите мне получить такое выражение, которое может соответствовать диапазону от -50 до 100M.
Я знаю, что мы можем написать простое условие if, но я хочу только регулярное выражение.
Заранее спасибо.
Это... не то, для чего нужны регулярные выражения... "Я знаю, что мы можем написать простое условие if, но мне нужны только регулярные выражения". - ПОЧЕМУ?!
Связанный: stackoverflow.com/questions/676467/…
Знак минус должен применяться только к части от -50 до -1, а не ко всему выражению. ^(?:-0*(?:[1-9]|[1-4][0-9]|50)|(?:0*[0-9]{1,8}|100000000))$
Вы можете использовать следующее регулярное выражение:
/^(-50|-[1-4]?\d|100000000|[1-9]?\d{1,7})$/gm
Объяснение:
^
соответствует началу строки
-50
матч -50
ИЛИ
-
только отрицательные числа
[1-4]?
совпадение от 1 до 4 - необязательно, затем: любое число
ИЛИ
100000000
соответствует 100000000
ИЛИ
[1-9]?
сопоставьте от 1 до 9 - необязательно, а затем:
\d{1,7}
угадайте любое число от 1 до 7 раз
$
соответствует концу строки
Используйте варианты global
и multiline
.
было бы здорово, если бы вы добавили решение, если пользователь добавит дробное значение 33,44 до 2 знаков после запятой.
Это не то, чего хочет ОП, так что нет.
поиск аналогичного ответа с двумя знаками после запятой, не могли бы вы предложить.
Хорошо, попробуйте это: ^(-50|-[1-4]?\d(\.\d\d?)?|100000000|[1-9]?\d{1,7}(\.\d\d?)?)$
- это позволит использовать один или два десятичных знака.
^(-50|-[1-4]?\d(\.\d\d?)?|100000000|[1-9]?\d{1,7}(\.\d\d?)? )$ это выражение работает нормально, но граничная точка не принимает 50,00 или 100000000,00, не могли бы вы предложить.
@Nikse: добавьте (\.00?)?
после -50
и после 100000000
Спасибо, это работает, как и ожидалось.
Регулярное выражение, обслуживающее начальные нули и положительный и отрицательный знак. Работает только для целых чисел.
^(-0*(50|[0-4]?[0-9])|\+?0*([0-9]{1,8}|100000000))$
Прецедент
Использование с JavaScript:
let number = -50; /* <-- test number or string here */
let withinTheRange = Boolean(/^(-0*(50|[0-4]?[0-9])|\+?0*([0-9]{1,8}|100000000))$/.exec(number));
Это полное решение. Отличная работа!
Вы используете pcre или javascript?