【问题标题】:I need Regex Expression for 12 hours date/time format我需要 12 小时日期/时间格式的正则表达式
【发布时间】:2021-08-06 06:54:12
【问题描述】:

我需要 12 小时日期/时间格式的正则表达式。 我试过了,但没用。

let startTime = "8/3/2021, 3:40:26 PM"     
if (startTime == "/^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/"){
    console.log("valid format")
  } 
else{
   console.log("in-valid format")
  }

上面的代码显示了无效的格式。

【问题讨论】:

标签: javascript regex


【解决方案1】:

这个怎么样?

const date = '8/3/2021, 3:40:26 PM';
const regex = /([0-9]*\/[0-9]*\/[0-9]*, [0-9]*:[0-9]*:[0-9]* (PM|AM))/;
const found = date.match(regex);
console.log(found);

【讨论】:

    【解决方案2】:

    也许非正则表达式的解决方案会起作用?

    const startTime = "8/3/2021, 3:40:26 PM";
    const otherTime = new Date(`2021/3/8 14:40:26`).toString();
    
    console.log(`${startTime}:  ${checkTimeString(startTime)}`);
    console.log(`${otherTime}:  ${checkTimeString(otherTime)}`);
    
    function checkTimeString(str) {
      const splitted = str.split(/[:\/\-, ]/).filter(v => v.length);
    
      return splitted.length === 7 && 
        +(splitted[3]) <= 12 && 
        [`AM`, `PM`].includes(splitted[6]);
    }

    【讨论】:

      【解决方案3】:

      关于您尝试的模式:

      • 模式不匹配,因为对于从 1 到 9 范围内的日期和月份部分,此模式 0[1-9] 需要前导零,而示例字符串 8/3/2021 中没有该前导零

      • 你也没有匹配它后面的逗号空间和时间部分


      不使用捕获组,使前导零可选并匹配 12 小时格式:

      ^(?:0?[1-9]|1[0-2])\/(?:0?[1-9]|1\d|2\d|3[01])\/(?:19|20)\d{2}, (?:0?[1-9]|1[0-2]):[0-5][0-9]:[0-5][0-9] [AP]M$
      
      • ^ 字符串开始
      • (?:0?[1-9]|1[0-2])\/ 匹配数字 1 到 12 和 / 与 [1-9] 的可选零
      • (?:0?[1-9]|1\d|2\d|3[01])\/ 匹配数字 1 到 31 和 /,其中 [1-9] 可选零
      • (?:19|20)\d{2}, 匹配 19 或 20、2 位数字和 ,
      • (?:0?[1-9]|1[0-2]):[0-5][0-9]:[0-5][0-9] 匹配 12 小时格式的时间模式
      • [AP]M 匹配 AMPM
      • $字符串结束

      Regex demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-08
        • 2014-10-23
        • 2019-02-26
        • 1970-01-01
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多