13

我有一年的输入字段,我需要一个正则表达式来验证它。我有这样的代码:^([12]\d)?(\d\d)$。但我希望只允许验证特定范围内的年份(例如 1990-2010 年)。我该怎么做?

编辑。范围必须是 1950-2050

4

8 回答 8

37

试试这个:

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]
于 2013-07-09T12:04:35.613 回答
10

RegExp 在这里似乎不是正确的工具。如果您已经隔离了年份值,则可以进行简单的比较:

if (+yr >= 1990 && +yr <= 2010)

+yr字符串转换为数字

于 2013-07-09T12:05:32.053 回答
7

对于 1950 到 2050 的范围,您可以使用以下正则表达式:

^19[5-9]\d|20[0-4]\d|2050$

在线演示

于 2013-07-09T12:09:13.730 回答
4

正则表达式:

/^(19[5-9]\d|20[0-4]\d|2050)$/

更轻松...

var year = parseInt(textField.value, 10);
if( year >= 1950 && year <= 2050 ) {
    ...
}
于 2013-07-09T12:07:58.320 回答
2
(199[0-9]|200[0-9]|2010)

这将适用于您的“示例案例”。

有用的网站:http ://utilitymill.com/utility/Regex_For_Range

于 2013-07-09T12:05:25.223 回答
2

从 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");
于 2015-12-28T08:46:57.317 回答
1

如果您想检查年龄在 18 岁或 70 岁之间,我就是这样做的。我的解决方案是

function yearRange(year) {
  let now = new Date().getFullYear();
  let age = now - Number(year);
  if (age < 18 || age > 70) return false;
  return true;
}
于 2020-08-10T07:52:32.120 回答
0

例如,如果您想在电影名称中查找年份,这是一个正则表达式。年份 b/n 1900 - 2029 和一些符号允许包装年份 .-_+[(

(?<=(?:\s|\.|_|\-|\+|\(|\[))(?:19[2-9]|20[0-2])\d(?=\s|$|\.|_|\-|\+|\)|\])

在这里查看 https://regex101.com/r/eQ9zK7/82

请注意,您不能以年份开头,因为前面至少有间隔。在示例中,前几行是匹配的,因为我们在一行中有多行它们不会匹配。

1917.2019.1080p ... 即使 1917 在范围内,它也只会标记 2019

于 2020-08-29T14:40:03.437 回答