年序的正则表达式

时间:2011-10-26 21:32:47

标签: javascript html regex

所以我试图匹配像

这样的东西
2011,2012,2013

2011,

2011 

但不是:

2011,2012011,201,2012

我尝试使用([0-9]{4},?([0-9]{4},?)*),但如果第一年匹配,则不考虑其余部分。

4 个答案:

答案 0 :(得分:4)

你很亲密。

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

这将匹配由重复的4位数字和逗号序列组成的任何字符串。

^$分别匹配字符串的开头和结尾。因此,只有当字符串仅包含 那些元素时才会匹配。

(?:)是非捕获组。它允许您创建重复组而不将所有组存储到变量中。

编辑:忘记了最后的可选逗号。添加了,?来处理它。

编辑2:在FailedDev的建议中,这是我最初的想法。它也有效,但我认为它更难理解。它更聪明,但这并不总是一件好事。

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

答案 1 :(得分:1)

这样可以解决问题......

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

即。 4个数字后跟零或更多(逗号后跟4位数),最后可选择最后一个(坏看)逗号。

第一个^和最后$个字符确保字符串中不存在任何其他内容。

答案 2 :(得分:1)

if (subject.match(/^\d{4}(?:,?|(?:,\d{4}))+$/)) {
    // Successful match
}

这应该有用。

说明:

"^" +              // Assert position at the beginning of the string
"\\d" +             // Match a single digit 0..9
   "{4}" +            // Exactly 4 times
"(?:" +            // Match the regular expression below
   "|" +              // Match either the regular expression below (attempting the next alternative only if this one fails)
      "," +              // Match the character “,” literally
         "?" +              // Between zero and one times, as many times as possible, giving back as needed (greedy)
   "|" +              // Or match regular expression number 2 below (the entire group fails if this one fails to match)
      "(?:" +            // Match the regular expression below
         "," +              // Match the character “,” literally
         "\\d" +             // Match a single digit 0..9
            "{4}" +            // Exactly 4 times
      ")" +
")+" +             // Between one and unlimited times, as many times as possible, giving back as needed (greedy)
"$"                // Assert position at the end of the string (or before the line break at the end of the string, if any)

答案 3 :(得分:0)

/^(?:\d{4},?)*$/

检查四个数字,每个数字后面可能跟一个逗号,0到多次