Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式验证1945年至当前年份之间的输入年份_Javascript_Regex - Fatal编程技术网

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

Javascript正则表达式验证1945年至当前年份之间的输入年份,javascript,regex,Javascript,Regex,我想使用regex验证输入年份从1945年到当前年份的输入文本。。但我仍然不知道如何获得充满活力的一年。。我从stackoverflow中看到了很多参考资料,但它们只在1945-2000这样的静态年份使用 我想让它动态,就像用户只能输入1945到2018年,如果用户输入2019,它将显示一个错误 这是静态的: let yearPattern = new RegExp(/^(194[5-9]|19[5-9]\d|200\d|2018)$/) 我试图欺骗它,但我认为验证不会起作用 我试着这样做:

我想使用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]}]`

使用此项结束时,我的验证将不起作用。

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

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

函数getPatterndt{ 设y=momentdt.format'YYYY'。拆分; 设patternStr=`194[5-9]| 19[5-9]\\d | 20[0-${y[2]-1}]\\d | 20${y[2]}[0-${y[3]}]$`; 返回新的RegExppatternStr; } 让pattern=getpatternnewdate; console.logpattern.test'1944';//错误的 console.logpattern.test'1945';//符合事实的 console.logpattern.test'1975';//符合事实的 console.logpattern.test'2000';//符合事实的 console.logpattern.test'2002';//符合事实的 console.logpattern.test'2010';//符合事实的 console.logpattern.test'2011';//符合事实的 console.logpattern.test'2018';//符合事实的 console.logpattern.test'2019';//错误的 console.log“***”; 模式=获取模式'2023-01-01'; console.logpattern.test'2018';//符合事实的 console.logpattern.test'2019';//符合事实的 console.logpattern.test'2020';//符合事实的 console.logpattern.test'2021';//符合事实的 console.logpattern.test'2022';//符合事实的 console.logpattern.test'2023';//符合事实的 console.logpattern.test'2024';//错误的 为什么要使用正则表达式,而不是简单地检查日期是否小于1945年或大于当前年份

将正则表达式用于如此简单的任务会使事情变得相当复杂。相反,选择一个更简单的解决方案

像这样

var输入=2011年; var currentYear=新日期。getFullYear; 如果输入<1945==false&&input>currentYear==false { //输入数据正确,不小于1945年或大于当年 console.logtrue; } 其他的 { //日期小于1945或大于当前年份,返回false。 console.logfalse; } 给你:

让currentYear=moment.year.toString; 设first=currentYear.substring2,3; 设第二个=当前年份。子字符串3,4; 让yearPattern=newregexp“^194[5-9]| 19[5-9][0-9]| 20[0-${first}][0-${second}]$”; console.logyearPattern.test'1944';//错误的 console.logyearPattern.test'1945';//符合事实的 console.logyearPattern.test'2008';//符合事实的 console.logyearPattern.test'2011';//符合事实的 console.logyearPattern.test'2017';//符合事实的 console.logyearPattern.test'2019';//错误的 console.logyearPattern.test'2099';//错误的
只需使用日期对象并比较年份?为什么要使用正则表达式?我正在使用react js和antd设计框架…它有一种使用正则表达式的模式。您正在做的正是它所做的。我建议你与作者联系,或者从那里的精简代码中获得灵感。我也尝试过。。但正如我之前所说,它是静态的。。如果明天是2019年,那么我必须改变我的正则表达式模式。@James,既然你真的需要一个动态正则表达式,我就再刷一次。看看这对你是否有效。2011年到2017年怎么样?好吧,因为James表示他确实需要一个正则表达式,我通过一个工作正则表达式进行排序,并进行必要的动态替换。我还在学习正则表达式,所以如果这个公式有问题,请告诉我。谢谢你的代码不是100%有效。。。因为我认为正则表达式的模式仍然是50%动态的。。因为它只在2099年前有效。。我说的对吗?没错,詹姆斯,但你真的需要它走多远?照现在的样子读已经够让人困惑的了。对我来说,保持适度的可读性似乎是一个合理的考虑。您需要一个可以动态替换当前年份的正则表达式值的解决方案。这一解决方案将在未来近82年内有效。不过我的意见是。如果你想要它100%的动态,那么这就给了你一个开始的地方。我显然不支持regex,但一旦我们达到2020年,这难道不会打破吗?如果我读对了,2020年这个正则表达式将不再有效。第一次换人有效,但第二次换人无效。我错过什么了吗?我在下面重新发布了一个解决方案,我认为它涵盖了James所寻找的内容。是否可以使用正则表达式实现100%动态?因为这只在2099年前有效