我想用输入年份从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]}]`
在使用此结束时,我的验证无法正常工作..
答案 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}}