期間を表す文字列があります。 次のいずれかのようになります。
10d12h59m
10d12h
10日
12時間
70
「d」の前の数字は日を表し、「h」の前の数字は時間を表し、「m」の前の数字は分を表し、数字だけの場合は分を意味します。
その文字列に一致する JavaScript の正規表現が必要です。
期間を表す文字列があります。 次のいずれかのようになります。
10d12h59m
10d12h
10日
12時間
70
「d」の前の数字は日を表し、「h」の前の数字は時間を表し、「m」の前の数字は分を表し、数字だけの場合は分を意味します。
その文字列に一致する JavaScript の正規表現が必要です。
一致するかどうかのみを確認したい場合:/^(?:\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
文字列を時間、日、分に解析するには:
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
これを試して:
/(\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
この正規表現を使用します(\d+[dmh]?)+
これを試して:
/(\d+d)?(\d+h)?(\d+m?)?/
一致した各グループで、簡単に適用できますparseInt(…, 10)
。