Javascript Regex验证1945年 - 当前年份之间的输入年份

时间:2018-04-19 04:31:43

标签: javascript regex

我想用输入年份从1945年到今年使用正则表达式验证我的输入文本..但我仍然不知道如何获得动态年份..我看到很多来自stackoverflow的引用但它们只是为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]}]`

在使用此结束时,我的验证无法正常工作..

3 个答案:

答案 0 :(得分:2)

为什么使用List<Cl> groups = list.GroupBy(b => new { b.vi, b.vs }) .Select(x => new Cl() { vi = x.Key.vi, vs = x.Key.vs, am = x.Sum(y => y.am) }).ToList(); 而不是简单地检查RegEx是否小于 1945 或大于当前年份

使用date进行这样一个简单的任务会让事情变得相当复杂。而是寻求更简单的解决方案。

喜欢这样

RegEx

答案 1 :(得分:2)

你走了:

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年,那就按照我的所作所为,你就可以了。

答案 2 :(得分:0)

您可以在创建新的RegEx时传入String值。只需省略正斜杠。

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

{{1}}
{{1}}