Мне нужно регулярное выражение для диапазона от 18 до 65.
Я использовал это -> 1[89]|[2-5][0-9]|6[0-5], но оно не работает должным образом, а также принимает более двух цифр. Пожалуйста, предложите.
Я хотел ввести возраст от 18 до 65 лет.
regex является нет подходящим инструментом для этой работы. Его можно использовать для проверки того, выглядит ли строка как число (т. е. содержит только цифры), но на этом ее возможности заканчиваются. Затем проанализируйте строку, получите число и сравните число с ограничениями.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы могли бы попробовать
const regex = /^(1[8-9])|([2-5][0-9])|(6[0-5])$/
console.info(regex.test(17)) // false
console.info(regex.test(18)) // true
console.info(regex.test(65)) // true
console.info(regex.test(66)) // falseНо, как уже говорилось в комментариях, регулярное выражение для этого является излишним.
Вы должны использовать регулярное выражение для извлечения числовых значений, а затем использовать другую функцию для сравнения извлеченного значения с необходимым значением.
Это работает, но принимает более двух цифр.
Хотя в соответствии с комментарием AZ_ условие упоминания хорошо, если вы хотите использовать регулярное выражение, попробуйте выполнить его.
^1[8-9]$|^[2-5][0-9]$|^6[0-5]$
Также проходит на 11-17
Проваливается на 20, 30, 40, 50
@CinCout, спасибо, что сообщили мне, изменил это сейчас.
Это соответствует 1800000
Вы довольно близки, проблема с вашим выражением заключается в том, что вам не хватает тегов привязки, которые говорят, что механизм регулярных выражений должен соответствовать только заданной строке (и сделать его неудачным, если что-то еще будет до или после).
Немного изменив выражение лица на это: ^(1[89]|[2-5][0-9]|6[0-5])$ (пример здесь). ^ впереди гарантирует, что сопоставление начнется в самом начале строки, а $ в конце гарантирует, что сопоставление остановится в конце строки. Это гарантирует, что предоставленная строка соответствует нужному шаблону, в целом, поэтому 19 будет соответствовать, а 119 — нет.
В качестве альтернативы (как это, скорее всего, будет предложено) будет проще разбить на -, а затем использовать обычные математические операторы.
@RoshanYadav: Если ответ помог вам, отметьте его для других.
Если вы действительно хотите сделать это с помощью регулярных выражений, вам нужно использовать ^ и $. Таким образом, число (от 18 до 65) будет единственным допустимым вводом (никаких других символов):
^(1[89]|[2-5][0-9]|6[0-5])$
Много ответов... Может быть, загляните на этот удобный веб-сайт, если в будущем вам понадобятся другие диапазоны? http://gamon.webfactional.com/regexnumericrangegenerator/
\b(1[89]|[2-5][0-9]|6[0-5])\b
Это соответствует abc*$^189245%/:
Отредактированный пример для соответствия всему слову.
регулярное выражение является излишним для этого.
num >= 18 && num <=65достаточно