-4

期間を表す文字列があります。 次のいずれかのようになります。

10d12h59m

10d12h

10日

12時間

70

「d」の前の数字は日を表し、「h」の前の数字は時間を表し、「m」の前の数字は分を表し、数字だけの場合は分を意味します。

その文字列に一致する JavaScript の正規表現が必要です。

4

5 に答える 5

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
于 2013-01-30T11:08:11.167 に答える
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/

編集:

文字列を検証するには、次のような基本的な検証のために、3 つの異なるバリエーション (dhm、dh、および d はすべて同じバリエーションにすることができます) のパターンを使用できます^(\d+d(\dh(\d+m)?)?|\d+h|\d+m?)$

値を制限する必要がある場合は、たとえば、値を 0 ~ 59 に制限したり、00 ~ 59 などの2 桁を要求したりする[0-5]?\d代わりに、を使用できます。\d+[0-5]\d

于 2013-01-30T10:59:58.547 に答える
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.

1 桁の数字または 99 を超える数字も渡したい場合は、次の正規表現を使用します。

/(\d+[dhm]?){1,3}/
//  ^ Note the added +, instead of \d
于 2013-01-30T10:49:31.183 に答える
0

この正規表現を使用します(\d+[dmh]?)+

于 2013-01-30T10:53:12.983 に答える
0

これを試して:

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

一致した各グループで、簡単に適用できますparseInt(…, 10)

于 2013-01-30T10:53:32.087 に答える