日付および時刻の正規表現

正規表現のサンプルの中で日付および時刻にマッチする正規表現について解説します。

(Last modified: )

日付にマッチする正規表現

日付は次のような値( yyyy/mm/dd の形式で一桁の場合はゼロパディングを行う場合)となります。

2020/01/31

日付にマッチする正規表現は次のようになります。

^[0-9]{4}/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])$

以下解説と前提条件です。

年の部分は 0000 から 9999 までなので数値(0-9)が 4 つ連続することになります。この部分の正規表現は次のようになります。

[0-9]{4}

月の部分は 01 から 12 までです。00 から 09 まで、または 10 から 12 までとなります。この部分の正規表現は次のようになります。

(0[1-9]|1[0-2])

日の部分は 01 から 31 までです。00 から 09 まで、または 10 から 29 まで、または 30 か 31 となります。この部分の正規表現は次のようになります。

(0[1-9]|[12][0-9]|3[01])

年、月、日の部分をそれぞれをスラッシュ(/)で結び、これに文字列の先頭にマッチするキャレット( ^ )と文字列の末尾にマッチするドル記号を( $ )を追加して組み合わせたものが日付を表す正規表現となります。

※ 2月30日 など存在しない日付のチェックは行っていません。

※ スラッシュ( / ) はプログラミング言語によってはエスケープ処理が必要な場合があります。

サンプル

JavaScript を使って簡単な正規表現のサンプルを作成してみます。

const regex = /^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])$/;

regex.test('1982/01/24');
--> true
regex.test('2016/10/04');
--> true
regex.test('945/04/06');
--> false  // 年の部分の桁数
regex.test('2020-08-06');
--> false  // スラッシュではなくハイフン

日付にマッチする正規表現(1)

時刻にマッチする正規表現

時刻は次のような値( hh:mm:ss の形式で一桁の場合はゼロパディングを行う場合)となります。( 24 時間制の場合)。

08:25:41
21:06:18

時刻にマッチする正規表現は次のようになります。

^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$

以下解説と前提条件です。

時間の部分は 00 から 23 までなので 00 から 19 まで、または 20 から 23 までとなります。この部分の正規表現は次のようになります。

([01][0-9]|2[0-3])

※ 12 時間制にする場合は、時間の部分は 00 から 11 までなので 00 から 09 まで、または 10 から 11 までとなります。この部分の正規表現は次のようになります。

(0[0-9]|10|11)

分および秒の部分は 00 から 59 までとなります。この部分の正規表現はそれぞれ次のようになります。

[0-5][0-9]

時間、分、秒の部分をそれぞれをコロン(:)で結び、これに文字列の先頭にマッチするキャレット( ^ )と文字列の末尾にマッチするドル記号を( $ )を追加して組み合わせたものが時刻を表す正規表現となります。

サンプル

JavaScript を使って簡単な正規表現のサンプルを作成してみます。

const regex = /^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/;

regex.test('08:25:41');
--> true
regex.test('23:04:16');
--> true
regex.test('26:32:14');
--> false  // 時の部分が範囲外
regex.test('12:72:31');
--> false  // 分の部分が範囲外

時刻にマッチする正規表現(1)

-- --

正規表現のサンプルの中で日付および時刻にマッチする正規表現について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。