我有一年的输入字段,我需要一个正则表达式来验证它。
我有这样的代码:^([12]\d)?(\d\d)$
。
但我希望允许仅在一定范围内验证年份(例如,1990-2010)。我该怎么办?
编辑。范围必须是1950-2050
答案 0 :(得分:27)
试试这个:
1990 - 2010:
/^(199\d|200\d|2010)$/
1950 - 2050:
/^(19[5-9]\d|20[0-4]\d|2050)$/
其他例子:
1945 - 2013:
/^(194[5-9]|19[5-9]\d|200\d|201[0-3])$/
1812 - 3048:
/^(181[2-9]|18[2-9]\d|19\d\d|2\d{3}|30[0-3]\d|304[0-8])$/
基本上,您需要将范围拆分为简单的“可复制”块:
1812-3048: 1812-1819 + 1820-1899 + 1900-1999 + 2000-2999 + 3000-3039 + 3040-3048
regex: 181[2-9] 18[2-9]\d 19\d\d 2\d{3} 30[0-3]\d 304[0-8]
答案 1 :(得分:7)
RegExp似乎不是正确的工具。如果您已经将年份值隔离,那么简单的比较就可以了:
if (+yr >= 1990 && +yr <= 2010)
+yr
将字符串转换为数字
答案 2 :(得分:5)
答案 3 :(得分:2)
答案 4 :(得分:1)
正则表达式:
/^(19[5-9]\d|20[0-4]\d|2050)$/
...更容易
var year = parseInt(textField.value, 10);
if( year >= 1950 && year <= 2050 ) {
...
}
答案 5 :(得分:1)
1995年的当前年份(动态)正则表达式
var current_year = new Date().getFullYear().toString().split("");
var reg=new RegExp("^(199[5-9]|200[0-9]|[0-"+current_year[0]+"][0-"+current_year[1]+"][0-"+current_year[2]+"][0-"+current_year[3]+"])$");
reg.test("1995");
答案 6 :(得分:0)
如果您要检查年龄在18到70岁之间的年龄,我会这样做。 我的解决办法是
function yearRange(year) {
let now = new Date().getFullYear();
let age = now - Number(year);
if (age < 18 || age > 70) return false;
return true;
}
答案 7 :(得分:0)
例如,如果您想以电影名称查找年份,则为正则表达式。 1900年-2029年b / n年,并允许使用某些符号将年份..__ + [(
(?<=(?:\s|\.|_|\-|\+|\(|\[))(?:19[2-9]|20[0-2])\d(?=\s|$|\.|_|\-|\+|\)|\])
在这里查看 https://regex101.com/r/eQ9zK7/82
请注意,您不能以年份开头,因为前面至少有间隔。 在该示例中,前几行是匹配的,因为我们在同一行中有多行它们不会匹配。
1917.2019.1080p ... 即使1917处于射程范围内,也只会标记为2019