Javascript 验证日期模式

Javascript 验证日期模式,javascript,Javascript,我需要一个javascript方法来验证日期模式,如2012年1月14日所示 到目前为止,我还不确定该使用哪个正则表达式,因为它不是标准日期,如2012年1月14日或2012年1月14日或2012年4月1日。我曾尝试对早期启动进行类似的操作,以将其拆分,但最终我收到了一个总拆分 这是我的拆分代码 function validateDate(date){ var test = date.replace(",",""); alert(test); var split = test.

我需要一个javascript方法来验证日期模式,如2012年1月14日所示

到目前为止,我还不确定该使用哪个正则表达式,因为它不是标准日期,如2012年1月14日或2012年1月14日或2012年4月1日。我曾尝试对早期启动进行类似的操作,以将其拆分,但最终我收到了一个总拆分

这是我的拆分代码

 function validateDate(date){
   var test = date.replace(",","");
   alert(test);
  var split = test.split("");
  for(i=0;i<split.length;i++){
      alert(split[i]);
   }
  alert("total length "+split.length);
}
函数验证日期(日期){
var测试=日期。替换(“,”,”);
警报(测试);
var split=测试分割(“”);
对于(i=0;i使用正则表达式:

^[a-zA-Z]{3}\s[0-9]{1,2},\s[0-9]{4}$
这适用于任何月份为三个字符、日后为逗号、年为四位数的日期,您可以按顺序使用its和its。例如:

moment("Jan 14, 2012", "MMM DD YYYY").isValid();

您可以使用以下内容:

(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec), [0-3]?\d (\d\d)?\d\d

请免费使用该表达式进行调整

您可以将该格式转换为所需格式。您只需提取部分:

function formatDate( dateStr ) {
  var date = new Date( dateStr ),
      m = date.getMonth() + 1,
      d = date.getDate(),
      y = date.getFullYear();
  return m +'/'+ d +'/'+ y; // you can use any format here
}

console.log( formatDate( 'Jan 14, 2012' ) ); //=> '1/14/2012'
然后,您可以将新字符串与此函数一起使用:。这将有效地验证日期,因此“2011年2月29日”不会验证,例如,正如mplungjan指出的那样

用法:

if ( isValidDate( formatDate( 'Jan 14, 2012' ) ) ) {
  // valid
} else {
  // not valid
}

它是传递给日期对象的有效字符串


你能给出更多的输入示例吗?我有一个日期输入格式,看起来像2012年1月14日,所以我想验证这个字段,以确保用户以正确的格式添加这些日期。但是这种日期不是标准的,所以很难进行验证我猜2011年2月29日在您的案例中有效2011年2月29日在您的案例中有效不验证,按照日期验证。一旦你通过了正确的格式,它就会正常工作。在这里演示,嗯,所以让我们加载另一个5K小型框架,而不是使用我发布的5行:}
var monthNames = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(",");
function isvalid(str) {
  var d = new Date(str);
  var dateParts = str.split(" ");
  return monthNames[d.getMonth()]===dateParts[0] &&
         d.getDate()===parseInt(dateParts[1],10) &&
         d.getFullYear()===parseInt(dateParts[2],10);
}      
alert(isvalid("Jan 14, 2012"));
alert(isvalid("Feb 29, 2011"));