javascript

时间:2016-02-12 06:38:35

标签: javascript validation date

我指的是这个link,因为我没有50个声望,所以我不允许在答案中发表评论,所以发布这个问题。我没有得到声明,你可以看到一个月从几个月减去。这可能很简单,但有人可以澄清一下吗?

var m =匹配1 - 1;吗

function isValidDate(date)
{
    var matches = /^(\d{2})[-\/](\d{2})[-\/](\d{4})$/.exec(date);
    if (matches == null) return false;
    var d = matches[2];
    var m = matches[1] - 1;
    var y = matches[3];
    var composedDate = new Date(y, m, d);
    return composedDate.getDate() == d &&
            composedDate.getMonth() == m &&
            composedDate.getFullYear() == y;
}

2 个答案:

答案 0 :(得分:1)

  

var m = matches1 - 1; ?

months索引从0开始。

因此,当您认为Jan为1时,0时实际为date.getMonth()

当您从日期字符串中获取1时,需要在将其设置为日期对象之前将其设为0

答案 1 :(得分:0)

在问题的背景下,验证功能过于夸张。只需要检查月份,因为如果日期或月份超出界限,生成日期的月份将会改变。

此外,正则表达式可以大大简化,考虑(假设输入是美国的m / d / y格式):



/* Validate a date string in US m/d/y format
** @param {string} s - string to parse
**                     separator can be any non–digit character (.-/ are common)
**                     leading zeros on values are optional
** @returns {boolean} true if string is a valid date, false otherwise
*/
function validateMDY(s) {
  var b = s.split(/\D/);
  var d = new Date(b[2],--b[0],b[1]);
  return b[0] == d.getMonth();
}

var testData = ['2/29/2016',   // Valid - leap year
                '2/29/2015',   // Invalid - day out of range
                '13/4/2016',   // Invalid - month out of range
                '13/40/2016',  // Invalid - month and day out of range
                '02/02/2017']; // Valid

document.write(testData.map(function(a) {
  return a + ': ' + validateMDY(a);
}).join('<br>'));
&#13;
&#13;
&#13;