【问题标题】:Need to validate dd/mm/yy hh:mmtt in Javascript需要在 Javascript 中验证 dd/mm/yy hh:mmtt
【发布时间】:2014-01-29 08:42:51
【问题描述】:

我正在尝试这个来验证日期。但是我不太确定这有什么问题。

注意-我的应用程序在 mm(分钟)和 AM/PM 之间没有空格。

var date = '21/01/13 6:40AM';

var myRegex = /0?[0-31]\d\/0?[0-12]\d\/\d{2} [0-11]\d:[0-59]\d[AP][M]/; 


if (myRegex.test(date)){
// Ok to proceed

}

我通过单独打破日期和时间来尝试以下操作,即以下组合

var date = '21/01/13'

var myRegex = /0?[0-31]\d\/0?[0-12]\d\/d{2}/; 

但是对于时间部分,即上午 6:40。我无法验证它

var myRegex = /[0-11]\d:[0-59]\d[AP][M]/;

你能帮帮我吗?

【问题讨论】:

  • 对于两位数的年份,您需要确定 1900 年到 2000 年之间的休息时间。

标签: javascript validation datetime date-formatting


【解决方案1】:

试试这个。支持闰年。例如:http://jsfiddle.net/Vk268/

 ^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$

【讨论】:

    【解决方案2】:

    试试这个:

    var regex = /^([0-11]\d):([0-59]\d)\s?(?:AM|PM)?$/i;

    Will work for : "06:40am"

    【讨论】:

    • 它也将允许“18:95AM”。试试看:/^(0?[0-9]|1[0-2]):([0-5][0-9])(AM|PM)$/i
    【解决方案3】:

    我建议您检查实际有效性而不仅仅是语法。检查使用datejs的这篇文章

    Jquery DateJs, is there validation for full date?

    【讨论】:

      【解决方案4】:

      验证日期和时间字符串的一种方法是创建一个日期对象并查看部分是否匹配,例如

      function validateDateString(s) {
          var b = s.split(/[\/ :]/g);
          var ap = s.substring(-2).toLowerCase();
          var h = parseInt(b[3], 10) + (ap == 'am'? 0 : 12);
          var min = parseInt(b[4],0);
          var y = +b[2] + (b[2] < 50? 2000 : 1900);
          var d = new Date(y, --b[1], b[0], h, min, 0, 0);
          var apValid = /am|pm/.test(ap);
      
          // Only need to test two parts of date and hours
          return d.getMonth() == b[1] && d.getDate() == b[0] && d.getHours() == h && apValid;
      }
      
      console.log(validateDateString('21/01/13 6:40AM')); // true
      

      您也可以使用正则表达式,如果您只需要支持符合 ES5 的浏览器,您可以将字符串重新格式化为符合 ISO 8601 的字符串,然后将其传递给 Date.parse。但这不适用于许多正在使用的浏览器。

      【讨论】:

      • validateDateString('21/01/13 11:40AM') 为我返回 true
      猜你喜欢
      • 2014-12-28
      • 2023-03-09
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多