Javascript 正则表达式验证 1945 年至当前年份之间的输入年份



我想使用正则表达式验证我的输入文本,输入年份从 1945 年到现在的年份.. 但我仍然不知道如何获得动态年份..我从stackoverflow中看到了很多参考,但他们只对1945 - 2000这样的静态年份这样做。

我想让它动态化,就像用户只能输入 1945 到 2018(当前年份(,如果用户输入 2019,它会显示错误

这是静态的:

let yearPattern = new RegExp(/^(194[5-9]|19[5-9]d|200d|2018)$/)

我试图欺骗它,但我认为验证不起作用

我试过这样:

let currentYear = moment(new Date()).format('YYYY').split('')
let yearPattern = new RegExp(/^(1769|17[7-9]d|18dd|19dd|200d|current)$/)
let valid = yearPattern.replace("current", `[2-${currentYear[0]}][0-${currentYear[1]}][0-${currentYear[2]}][0-${currentYear[3]}]`

在使用它结束时,我的验证将不起作用。

为什么使用 RegEx 而不是简单地检查date是不小于 1945 年还是大于当前年份

使用RegEx来完成如此简单的任务会使事情变得相当复杂。相反,选择更简单的解决方案。

这样

var input = "2011";
var currentYear = new Date().getFullYear();
if(input < 1945 == false && input > currentYear == false)
{
  // Correct input data given, its not smaller than 1945 or bigger than current year
  console.log(true);
}
else
{
  // Date is either smaller than 1945 or bigger than current year, return false.
  console.log(false);
}

你来了:

let currentYear = moment().year().toString();
let first = currentYear.substring(2, 3);
let second = currentYear.substring(3, 4);
let yearPattern = new RegExp(`^(194[5-9]|19[5-9][0-9]|20[0-${first}][0-${second}])$`);
console.log(yearPattern.test('1944')); // false
console.log(yearPattern.test('1945')); // true
console.log(yearPattern.test('2008')); // true
console.log(yearPattern.test('2011')); // true
console.log(yearPattern.test('2017')); // true
console.log(yearPattern.test('2019')); // false
console.log(yearPattern.test('2099')); // false
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>

注意:这将工作到2099年。我认为这对你来说已经足够了。右?如果你想超越2099年,那么按照我所做的,你很好。

您可以在创建新的正则表达式时传入字符串值。 只需省略正斜杠即可。

更新:用我认为可行的解决方案和正则表达式恢复了我的答案。

function getPattern(dt) {
  let y = moment(dt).format('YYYY').split('');
  let patternStr = `^(194[5-9]|19[5-9]\d|20[0-${y[2]-1}]\d|20${y[2]}[0-${y[3]}])$`;
  return new RegExp(patternStr);
}
let pattern = getPattern(new Date());
console.log(pattern.test('1944')); // false
console.log(pattern.test('1945')); // true
console.log(pattern.test('1975')); // true
console.log(pattern.test('2000')); // true
console.log(pattern.test('2002')); // true
console.log(pattern.test('2010')); // true
console.log(pattern.test('2011')); // true
console.log(pattern.test('2018')); // true
console.log(pattern.test('2019')); // false
console.log('***');
pattern = getPattern('2023-01-01');
console.log(pattern.test('2018')); // true
console.log(pattern.test('2019')); // true
console.log(pattern.test('2020')); // true
console.log(pattern.test('2021')); // true
console.log(pattern.test('2022')); // true
console.log(pattern.test('2023')); // true
console.log(pattern.test('2024')); // false
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.js"></script>

最新更新