Регулярное выражение для принадлежности к промежутку чисел

Имеется такое регулярное выражение, при помощи которого проверяется принадлежность введеного года в промежуток 1900 - 2100:

^19\d{2}|20\d{2}|2100$

Не могу понять, почему оно показывает введенные варианты, а-ля 1900232323, 201233333, как валидные. Буду благодарен, если подскажете.


Ответы (3 шт):

Автор решения: Rabban Keyak

Оно показывает введённые варианты валидными, потому что так написано регулярное выражение:

  1. Либо строка, начинающаяся с подстроки "19" и следующими за ней двумя любыми цифрами
  2. Либо строка, содержащая подстроку "20" и следующими за ней двумя любыми цифрами
  3. Либо строка, заканчивающаяся на подстроку "2100"

Очевидно что "1900232323" попадает под пункт 1: это строка, начинающаяся с подстроки "19" и следующих за ней двух цифр.

Возможно нужный вам результат (если я правильно понял задачу) даст следующая регулярка, в которой якори начала и окончания строки вынесены за скобки группы проверки вариантов последовательностей цифр:

^(?:19\d{2}|20\d{2}|2100)$
→ Ссылка
Автор решения: Сантер хакер

VSC-работает вот это - 19\d{2}|20\d{2}|2100

→ Ссылка
Автор решения: ksa

Предложу еще вот такой вариант...

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'))

→ Ссылка