根据多种格式检查日期

时间:2017-09-25 12:07:30

标签: javascript jquery

我在下面写了一些代码行,用于根据多种日期格式(如

)检查日期格式
           function checkValidDate(dateValue)
           {
                var dateFormat = getDateFormat();
                   switch(dateFormat)
                   {
                     case "d-m-Y":
                     var regex = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;
                          if(dateValue.match(regex))
                              return true;
                           else
                              return false;
                     break;

                     case "m-d-Y":
                     var regex = /^(0[1-9]|1[012])[-/.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d$/;
                          if(dateValue.match(regex))
                              return true;
                           else
                              return false;  
                      break;

                    case "Y-m-d":
                     var regex = /^(19|20)\d[- /.](0[1-9]|1[012]\d(0[1-9]|[12][0-9]|3[01]))$/;
                          if(dateValue.match(regex))
                              return true;
                           else
                              return false;  
                      break;
                   }
           }
             $("#dobfield").blur(function(){

                  var dob = $("#dobfield").val().trim();
                  var check = checkValidDate(dob);
                  if(check ==false)
                   alert("wrong");
             });

此项目接受三种格式" d-m-Y"," m-d-Y"," Y-m-d"。 现在我试图根据当前选择的日期格式检查输入的日期是否是有效的正则表达式格式。

以上代码无效!请帮帮我!!!

2 个答案:

答案 0 :(得分:1)

function checkValidDate(dateValue)
{
  var dateFormat="d-m-Y";
  switch(dateFormat)
  {
     case "d-m-Y":
     var regex = /^([1-9]|[12][0-9]|3[01])[- /.]([1-9]|1[012])[- /.]\d\d$/;
          if(dateValue.match(regex))
              return true;
           else
              return false;
     break;

     case "m-d-Y":
     var regex = /^([1-9]|1[012])[- /.]([1-9]|[12][0-9]|3[01])[- /.]\d\d$/;
          if(dateValue.match(regex))
              return true;
           else
              return false;  
      break;

    case "Y-m-d":
     var regex = /^\d\d[- /.]([1-9]|[12][0-9]|3[01])[- /.]([1-9]|1[012])$/;
          if(dateValue.match(regex))
              return true;
           else
              return false;  
      break;
    default:
        return false;
      break;
  }
}

我已经改变了正则表达式,以支持您所说的格式。希望这能帮助你。

Working Example

答案 1 :(得分:0)

我在这里看到了多个问题。

  • 提供的代码量 - 不是自我测试的示例
  • 根据定义 - 什么是d-m-Y?
  • 可能在正则表达式,取决于前一点。
  • 但最大的问题在于方法。

使用dateFormat切换是否有效?

d-m-Y实际上是dd-mm-YYYY吗? 在这种情况下,第一个正则表达式(除此之外没有测试 - 没有意义)是错误的。这个可行:

case "d-m-Y":
var regex = /^(0?[1-9]|[12][0-9]|3[01])[\-\-](0?[1-9]|1[012])[\-\-]\d{4}$/;

使用正则表达式是不够的。您需要使用更复杂的正则表达式来过滤掉31-2岁的日期,或者例如有29-2的日期。

您最好的选择是使用MomentJS。它很简单,而不是轻量级,经过严格的文档测试。