Учитывая год, для которого должен пройти этот год и будущие годы, было бы немного утомительно динамически создавать такое регулярное выражение. Попробуйте вместо этого использовать группу захвата, а затем просто проверьте, больше или равно ли захваченный YY предел:
const yearLimit = 19; // or pass this as an argument if you want
const re = /^(?:0[1-9]|1[0-2])(\d{2})$/;
const match = str.match(re);
if (!match) {
return false;
}
const year = Number(match[1]);
return year >= yearLimit;
const validate = (str) => {
const yearLimit = 19; // or pass this as an argument if you want
const re = /^(?:0[1-9]|1[0-2])(\d{2})$/;
const match = str.match(re);
if (!match) {
return false;
}
const year = Number(match[1]);
return year >= yearLimit;
};
console.log(
validate('1234'),
validate('1212')
);
^(?:0[1-9]|1[0-2])(\d{2})$
означает
^
- Начало строки соответствует (?:0[1-9]|1[0-2])
- Соответствует 01-12: либо 0[1-9]
- ведущий 0
, за которым следует число от 1 до 9, либо 1[0-2]
- ведущий 1
, за которым следует число от 0 до 2
(\d{2})
- сопоставить и записать любые две цифры $
- сопоставить конец строки