我想用输入年验证我的输入文本,从1945年到本年度使用regex。但我还是不知道如何得到充满活力的一年。我从堆栈溢出中看到了很多引用,但是他们只在静态年份,比如1945-2000年这样做。
我想把它变成动态的,就像用户只能输入1945直到2018年(当前年份),如果用户输入2019年,它将显示一个错误。
这是静态的:
let yearPattern = new RegExp(/^(194[5-9]|19[5-9]\d|200\d|2018)$/)我试过欺骗它,但我认为验证是行不通的
我试过这样做:
let currentYear = moment(new Date()).format('YYYY').split('')
let yearPattern = new RegExp(/^(1769|17[7-9]\d|18\d\d|19\d\d|200\d|current)$/)
let valid = yearPattern.replace("current", `[2-${currentYear[0]}][0-${currentYear[1]}][0-${currentYear[2]}][0-${currentYear[3]}]`在使用完这个之后,我的验证就不能工作了。
发布于 2018-04-19 06:29:04
您可以在创建新RegEx时传递字符串值。只需省略正切斜线。
更新:用我认为可行的解决方案和正则表达式恢复了我的答案。
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>
发布于 2018-04-19 06:44:23
为什么使用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);
}
发布于 2018-04-19 07:42:07
给你:
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>
Note:这将持续到2099年。我想这对你来说已经足够了。对吗?如果你想超越2099年,那么跟随我所做的,你是好的。
https://stackoverflow.com/questions/49912774
复制相似问题