Регулярное выражение для принадлежности к промежутку чисел
Имеется такое регулярное выражение, при помощи которого проверяется принадлежность введеного года в промежуток 1900 - 2100:
^19\d{2}|20\d{2}|2100$
Не могу понять, почему оно показывает введенные варианты, а-ля 1900232323, 201233333, как валидные. Буду благодарен, если подскажете.
Ответы (3 шт):
Оно показывает введённые варианты валидными, потому что так написано регулярное выражение:
- Либо строка, начинающаяся с подстроки "19" и следующими за ней двумя любыми цифрами
- Либо строка, содержащая подстроку "20" и следующими за ней двумя любыми цифрами
- Либо строка, заканчивающаяся на подстроку "2100"
Очевидно что "1900232323" попадает под пункт 1: это строка, начинающаяся с подстроки "19" и следующих за ней двух цифр.
Возможно нужный вам результат (если я правильно понял задачу) даст следующая регулярка, в которой якори начала и окончания строки вынесены за скобки группы проверки вариантов последовательностей цифр:
^(?:19\d{2}|20\d{2}|2100)$
Предложу еще вот такой вариант...
const re = /^((19|20)\d\d|2100)$/
console.log(re.test('1900'))
console.log(re.test('1911'))
console.log(re.test('2000'))
console.log(re.test('2022'))
console.log(re.test('2100'))
console.log(re.test('1900232323'))
console.log(re.test('201233333'))