我正在尝试以mm/yyyy
格式验证月份。请帮我提供这种日期格式的正则表达式。
我试过这个,/(0[1-9]|1\d|2\d|3[01])/(19|20)\d{2}$/
但我没有得到正确的结果。
答案 0 :(得分:0)
表达式的初始部分(更改)看起来像(有缺陷的)天验证,而不是月份。
也许:
/^(0[1-9]|1[012])\/(19|20)\d{2}$/
允许01
到09
(替换的第一部分)和10
,11
和12
(第二部分),然后任何一年在20或21世纪。注意两端的锚点,以及中间的/
反斜杠。
那些捕获组似乎也有点奇怪。如果您只想进行分组,而不是捕获组,请使用非捕获组:
/^(?:0[1-9]|1[012])\/(?:19|20)\d{2}$/
答案 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
上
如果你想更加严格,那么你也可以检查每个部分的长度。