【问题标题】:How to validate the DateTime of MM/dd/yyyy hh:mm format?如何验证 MM/dd/yyyy hh:mm 格式的 DateTime?
【发布时间】:2011-06-11 05:34:47
【问题描述】:

我正在使用 MaskedEditExtender 输入日期时间。我无法弄清楚如何验证它。

是否有任何正则表达式用于验证日期以及时间 MM/dd/yyyy hh:mm

或任何 Javascript 函数??

【问题讨论】:

标签: javascript asp.net regex


【解决方案1】:

这将解决您的问题:

^(([0]?[1-9]|1[0-2])/([0-2]?[0-9]|3[0-1])/[1-2]\d{3}) (20|21|22|23|[0-1]?\d{1}):([0-5]?\d{1})$

【讨论】:

  • 又是一个问题,如果我给出错误的格式,它会显示错误消息,但是对于空的时间它不会显示 errormsg..
  • @Lakshmitha,我已经更新了我的正则表达式。请尝试一下,如果有任何问题,请告诉我..
  • @Harun,谢谢。它现在正在工作。但是你已经给出了 dd/MM/yyyy HH:MM 格式。我只需要 MM/dd/yyyy HH:MM 格式。我已经尝试了很多编辑该表达式以更改为 MM/dd ,我无法得到。如何编辑?你能解释一下吗?
  • @Lakshmitha,哦!抱歉更新错误。我再次更新了 exprss。我检查了这个格式。希望这对你有用..
  • 实际上有必要转义斜线。这就是在这种情况下实际有效的方法:^(([0]?[1-9]|1[0-2])\/([0-2]?[0-9]|3[0-1])\/[1-2]\d{3}) (20|21|22|23|[0-1]?\d{1}):([0-5]?\d{1})$
【解决方案2】:

Javascript 有Date.parse

它采用美国格式的日期mm/dd/yyyy hh:mm:ss,并且该格式适用于我测试过的所有浏览器:Firefox、Safari、Chrome、Edge

console.log(new Date(Date.parse("03/25/2022 12:00")))

将于 2011 年 9 月 10 日中午返回

【讨论】:

  • 来自 Mozilla:“在 ES5 之前不建议使用 Date.parse,字符串的解析完全依赖于实现。不同主机解析日期字符串的方式仍有很多差异,因此日期字符串应该手动解析(如果要适应许多不同的格式,库可以提供帮助)。” developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @KelseyHannan 使用我建议的日期格式,它适用于我拥有的所有浏览器。火狐、Safari、Chrome、Edge
【解决方案3】:

使用DateTime.ParseDateTime.TryParse(也有ParseExactTryParseExact 等效项)。

如果字符串不代表有效的DateTime,则不会解析。

DateTime myDateTime = DateTime.ParseExact(myString, 
                                          "MM/dd/yyyy hh:mm", 
                                          CultureInfo.InvariantCulture);

如果值不可解析,上面会抛出异常。如果您想避免抛出异常的机会,请使用 Try 变体 - 这需要 out 参数并测试函数的返回值是否成功。

【讨论】:

  • 基于 OP 要求“任何 Javascript 函数”这一事实,我认为 C# 代码不会有用。看起来 OP 需要客户端验证。
  • @Gabe - OP 确实用 C# 标记了这个问题,因此我的回答。这个问题在我看来也是在询问解析 - 不一定使用 JS。
  • 看起来好像 OP 已经用 C# 编写了他们的 ASP.NET 页面,但正在寻找客户端验证。考虑到他们要求提供正则表达式或 Javascript 函数,我删除了 C# 标签。
【解决方案4】:

如果你想要正则表达式,这应该可以工作:

^(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/(19|20)\d\d ([01]\d|2[0-3]):[0-5]\d$

【讨论】:

    【解决方案5】:

    以下正则表达式:

    ^([1-9]|([012][0-9])|(3[01]))\/([0]{0,1}[1-9]|1[012])\/([1-2][0-9][0-9][0-9]) [0-2][0-9]:[0-9][0-9]
    

    给出这个结果:

    03/03/2021 02:12

    【讨论】:

      【解决方案6】:

      您可以尝试使用 "dd/MM/yyyy HH:mm" 格式验证日期的函数

          function ValidateDate(dt) {
              try {
                  var isValidDate = false;
                  var arr1 = dt.split('/');
                  var year=0;var month=0;var day=0;var hour=0;var minute=0;var sec=0;
                  if(arr1.length == 3)
                  {
                      var arr2 = arr1[2].split(' ');
                      if(arr2.length == 2)
                      {
                          var arr3 = arr2[1].split(':');
                          try{
                              year = parseInt(arr2[0],10);
                              month = parseInt(arr1[1],10);
                              day = parseInt(arr1[0],10);
                              hour = parseInt(arr3[0],10);
                              minute = parseInt(arr3[1],10);
                              //sec = parseInt(arr3[0],10);
                              sec = 0;
                              var isValidTime=false;
                              if(hour >=0 && hour <=23 && minute >=0 && minute<=59 && sec >=0 && sec<=59)
                                  isValidTime=true;
                              else if(hour ==24 && minute ==0 && sec==0)
                                  isValidTime=true;
      
                              if(isValidTime)
                              {
                                  var isLeapYear = false;
                                  if(year % 4 == 0)
                                       isLeapYear = true;
      
                                  if((month==4 || month==6|| month==9|| month==11) && (day>=0 && day <= 30))
                                          isValidDate=true;
                                  else if((month!=2) && (day>=0 && day <= 31))
                                          isValidDate=true;
      
                                  if(!isValidDate){
                                      if(isLeapYear)
                                      {
                                          if(month==2 && (day>=0 && day <= 29))
                                              isValidDate=true;
                                      }
                                      else
                                      {
                                          if(month==2 && (day>=0 && day <= 28))
                                              isValidDate=true;
                                      }
                                  }
                              }
                          }
                          catch(er){isValidDate = false;}
                      }
      
                  }
      
                  return isValidDate;
              }
              catch (err) { alert('ValidateDate: ' + err); }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-08
        • 2022-11-29
        • 2017-08-21
        • 1970-01-01
        相关资源
        最近更新 更多