【问题标题】:Javascript regext time format detectionJavascript 正则表达式时间格式检测
【发布时间】:2015-08-28 14:42:05
【问题描述】:

我正在尝试编写一些 JS 代码来验证以 24 小时格式输入到输入字段中的时间。我希望能够检测到 HH:MM、HHMM 和 HMM 并拒绝其他任何内容。我还想检测时间是否可能在 24 小时内 - 例如拒绝 26:70 之类的,这是我目前无法做到的:

function validateTime(rawtime) {
 var timeregex = new RegExp('([01]?[0-9]|2[0-3]):[0-5][0-9]');
 var timeregex4 = new RegExp('([01]?[0-9]|2[0-3])[0-5][0-9]');
 var timeregex3 = new RegExp('[0-9][0-5][0-9]');
 var numeric = new RegExp('^[0-9]+$');

 if (numeric.test(rawtime))
  { 

    if ((rawtime.length == 4) && (timeregex4.test(rawtime))){
        document.getElementById("fdbk").innerHTML ="time with 4 digits";
        }
    else if ((rawtime.length == 3) && (timeregex3.test(rawtime))){
      document.getElementById("fdbk").innerHTML ="time with 3 digits";
    }
   }
   else if (timeregex.test(rawtime)) {
    document.getElementById("fdbk").innerHTML ="time with :";

  }
}

Jsbin Example

【问题讨论】:

  • 如果 2300 不是下午 23 点而是午夜后 23 分钟(所以是 MMHH 而不是 HHMM)怎么办?从输入字符串中检测格式并不是那么简单。
  • 2300 在世界上用什么格式表示午夜过后 23 分钟?
  • 这只是一个例子。碰巧这种问题也被问到其他格式。因此,例如,您使用日期和月份而不是小时和分钟 0102 是意大利人的 2 月 1 日和英国人的 1 月 2 日
  • 请说明您对使用 24 小时表示法的期望。 00:00 至 24:00,或标准军事通信规定 00:00 至 23:59,或美国海军和美国海军陆战队规定 00:01 至 24:00? en.wikipedia.org/wiki/24-hour_clock
  • @DavideLorenzoMARINO 0102 对于大多数理智的国家来说是二月的第一天,尽管我个人会写 2 月 1 日(或 1 月 2 日)以避免歧义。

标签: javascript regex time


【解决方案1】:

不太清楚是什么问题,很简单^_^

var timeregex = /^([01]?[0-9]|2[0-3]):?([0-5][0-9])$/;

现在匹配它...

var match = rawtime.match(timeregex);

然后你得到...

var hours = parseInt(match[1],10),
    minutes = parseInt(match[2],10);

完成了吗?

【讨论】:

  • @Mike Yes it does。您只需要学习如何正确使用正则表达式工具:p
  • 24 小时表示法明确区分了开始 (00:00) 和结束 (24:00) 的午夜,即使某些英语国家的风格指南和军事通信法规不鼓励使用24:00 即使是 24 小时制。有时会避免使用 00:00。 OP对此的要求尚不清楚,因此这可能是也可能不是正确的答案。 :)
  • @Niet - 我对正则表达式缺乏了解是对的 - 因此我在这里提出问题;) - 但是你的原始正则表达式变量不应该也有 /gm 修饰符吗?我确实将它们添加到我的示例中,现在它 catches 所有所需的时间“格式”。所以谢谢你。
  • @Mike 此代码中的正则表达式假定rawtime 的字面意思是"0123" - 一个包含您的时间且仅包含您的时间的字符串,并从中提取小时和分钟。
【解决方案2】:

这是一个简单的函数(不使用 RegEx),可以验证您请求的时间格式。

function valTime(time) { 
    var len = time.length,
        hour,
        mins;

    if(len == 5) { //HH:MM
        var spl = time.split(':');
        if(!$.isArray(spl)) { return false; } //Not an array
        hour = spl[0];
        mins = spl[1];
    }
    if(len == 4) { //HHMM
        hour = time[0] + time[1];
        mins = time[2] + time[3];
    } 
    if(len == 3) { //HMM
        hour = time[0];
        mins = time[1] + time[2];
    }

    if(+hour <= 23 && +mins <= 59) {
        return true;
    } else {
        return false;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 2019-11-05
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2014-05-31
    相关资源
    最近更新 更多