正则表达式以匹配天数小时分钟

时间:2013-01-30 10:47:00

标签: javascript regex

我有一个表示持续时间的字符串。 它可以像下列之一:

  

10d12h59m

     

10d12h

     

10D

     

12小时

     

70

在“d”之前的数字代表天数,“h”之前的数字代表小时,“m”之前的数字代表分钟,如果它的正数则表示分钟数。

我想要一个匹配该字符串的javascript正则表达式。

5 个答案:

答案 0 :(得分:1)

如果您只想检查它是否匹配:/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/

的示例:

"10d12h59m".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // Array ["10d12h59m"]
"10d12h".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // Array ["10d12h"]
"10d".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // Array ["10d"]
"12h".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // Array ["12h"]
"70".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); //Array ["70"]

"foobar".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // null
"10d50m".match(/^(?:\d+d(?:\d+h(?:\d+m)?)|\d+[dh]?)$/); // null

答案 1 :(得分:0)

试试这个:

/(\d\d[dhm]?){1,3}/

这将匹配您的所有示例。

工作原理:

# \d\d   - Match 2 digits
# [dhm]? - followed by a optional d, h, or m.
# {1,3}  - and make sure there's 1, 2 or 3 of the previous.

如果您还想传递一位数字或99以上的数字,请使用此正则表达式:

/(\d+[dhm]?){1,3}/
//  ^ Note the added +, instead of \d

答案 2 :(得分:0)

使用此正则表达式(\d+[dmh]?)+

答案 3 :(得分:0)

试试这个:

/(\d+d)?(\d+h)?(\d+m?)?/

在每个匹配的群组中,您可以轻松应用parseInt(…, 10)

答案 4 :(得分:0)

将字符串解析为小时,天和分钟:

function parseDuration(s) {
  var m = /(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m?)?/.exec(s);
  return {
    days: parseInt(m[1], 10) || 0,
    hours: parseInt(m[2], 10) || 0,
    minutes: parseInt(m[3], 10) || 0
  };
}

演示:http://jsfiddle.net/Guffa/9hj5F/

编辑:

要验证字符串,您可以使用具有三种不同变体的模式(dhm,dh和d都可以是相同的变体,带有可选部分)进行基本验证,例如:^(\d+d(\dh(\d+m)?)?|\d+h|\d+m?)$

如果您还要限制值,您可以使用[0-5]?\d代替\d+将值限制为0到59,或[0-5]\d要求两位数即00-59。