正则表达式帮助 - 特定年份或年份范围

时间:2017-05-22 22:18:25

标签: javascript angularjs regex

我对这些不是很好。我无法弄清楚如何匹配这种情况:2012,2015(特定年份)2013-2015(年范围)2013- *(2013年之后的任何日期,即未来年份)。我可以让前两个场景匹配但不是最后一个。

/ ^ [0-9] {4}(?:[, - *] [0-9] {4})*,$ /

2012,2013,2014-2015, 2016 - * (不匹配)

3 个答案:

答案 0 :(得分:0)

您可以用逗号分隔并逐个查看年份:



let s = "2012,2013,2014-2015,2016-*,foo,292992,322,2103-238";
let split = s.split(',');

for (let x of split) {
  console.log(determine(x));
}

// or to check if all are ok:
let allOk = split.every(determine);
console.log("every: ", allOk);

function determine(year) {
  let y = year.split('-');
  if (!y[0].match(/^\d{4}$/)) return false;
  if (typeof y[1] === 'undefined' || y[1] === '*') return true;
  return determine(y[1]);
}




答案 1 :(得分:0)

这是适用于您的年份格式的正则表达式

[0-9]{4}\-?(?:[0-9]{4}|\*)?

check

答案 2 :(得分:0)

以下是如何处理整件事。由于逗号不能是可选的,如果您有更多年份并且您不想以逗号结尾,则必须重复年份:

^[0-9]{4}(?:-(?:[0-9]{4}|\*))?(?:,[0-9]{4}(?:-(?:[0-9]{4}|\*))?)*$