请建议我mm / yyyy格式的正则表达式

时间:2014-03-04 12:13:18

标签: javascript regex validation

我正在尝试以mm/yyyy格式验证月份。请帮我提供这种日期格式的正则表达式。

我试过这个,/(0[1-9]|1\d|2\d|3[01])/(19|20)\d{2}$/

但我没有得到正确的结果。

3 个答案:

答案 0 :(得分:0)

表达式的初始部分(更改)看起来像(有缺陷的)验证,而不是月份。

也许:

/^(0[1-9]|1[012])\/(19|20)\d{2}$/

Live Copy

允许0109(替换的第一部分)和101112(第二部分),然后任何一年在20或21世纪。注意两端的锚点,以及中间的/反斜杠。

那些捕获组似乎也有点奇怪。如果您只想进行分组,而不是捕获组,请使用非捕获组:

/^(?:0[1-9]|1[012])\/(?:19|20)\d{2}$/

Live Copy

答案 1 :(得分:0)

试试这个..

^(0[1-9]|1[012])\/(19[0-9][0-9]|2[0-9][0-9][0-9])$

它接受月份为MM,如'03'而不是'3'。

答案 2 :(得分:0)

在理解和可维护性(IMO)方面,这样的事情可能更容易,而不是正则表达式。

的Javascript

function isValidFormat(monthAndYear) {
    var parts = monthAndYear.split('/');

    return parts.length === 2 && parseInt(parts[0], 10) === +(parts[0]) && 
              parts[0] >= 1 && parts[0] <= 12 && parseInt(parts[1], 10) === +(parts[1]);
}

var tests = [
    '',
    ' ',
    '01/2014',
    '012013',
    'mm/yyyy',
    '01/yyyy',
    'mm/2014'];

tests.forEach(function (test) {
    console.log(test, isValidFormat(test))
});

输出

 false
  false
01/2014 true
012013 false
mm/yyyy false
01/yyyy false
mm/2014 false 

jsFiddle

如果你想更加严格,那么你也可以检查每个部分的长度。