HH:MM時間形式に一致するための正規表現


166

HH:MM形式で時刻を一致させるための正規表現が必要です。これが私が持っているもので、うまくいきます:

^[0-2][0-3]:[0-5][0-9]$

これは00:00から23:59までのすべてに一致します。

ただし、00:00、01:30だけでなく、0:00、1:00なども合わせて変更したいと思います。つまり、左端の数字をオプションにして、HH:MMだけでなくH:MMにも一致させます。

その変更を行う方法はありますか?私はこれがphpと同様にJavaScriptで動作するために必要です。


15
実際には、元の正規表現は有効な時間値の範囲全体と一致しません。たとえば、17:00
David Clarke

回答:


366

元の正規表現には欠陥があり04:00ます。たとえば、一致しません。

これはうまくいくかもしれません:

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

45
このregExpは、先行ゼロなしの時間です。先行ゼロを持つ時間のRegExpは^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO 2014年

15
@SergOは彼の答えをもっと注意深く読んでください。彼の答えは、先行ゼロとなしの両方です。
アレクサンダー

11
わずかに短い形式は^(?:\d|[01]\d|2[0-3]):[0-5]\d$
ビリー・ジョー・

2
C#でもうまく機能します。
Richard Ev

10
@SergOは^(0 [0-9] | 1 [0-9] | 2 [0-3]):[0-5] [0-9] $であってはなりません
Martin

58

時間の正規表現

  • HH:MM 12時間形式、オプションの先行0

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH:MM 12時間形式、オプションの先行0、必須子午線(AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH:MM 24時間、先頭に0

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH:MM 24時間形式、オプションの先行0

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH:MM:SS 24時間形式で、先頭に0が付きます

    /(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)/

リファレンスとデモ


4
ありがとうございました!この答えが一番上にあるはずです。
Marc、

何らかの理由HH:MM 24時間、先頭に0は付きません^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$か?
Vlad Macovei

答えの正規表現がうまく機能するからです。そして、あなたがコメントしたものも機能します。どちらでもお気軽にご利用ください。:)
Niket Pathak 2018

上記の正規表現で12時間(午前/午後)の文字列に一致する人の場合、正規表現に対して「13:00 PM」をテストすると、文字列の「3:00 PM」の部分が有効。次のifステートメントを使用して問題を解決しましたlet res = value.match(regex); if(res && res [0] === value)doSomething();
Taha Rehman Siddiqui

49

上記のどれも私にとってはうまくいきませんでした。最後に私は使用しました:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$ (js engine)

論理:

最初の数値(時間)は、0から19の間の数値-> [0-1]?[0-9](1桁の数値を許可)
または
20から23の間の数値->のいずれかです。2[0-3]

2番目の数値(分)は常に00から59の間の数値です-> [0-5][0-9](1桁は許可されていません)


8
最初の角括弧内のダッシュは必要ありません[01]。同様に機能します;)
チェコ語

3
ここだけ(別売先行ゼロを含む)12時間の時間を受け入れるように改訂されたこの答えがあります:^(0?[1-9]|1[0-2]):[0-5][0-9]$
rgbflawed

^([0-1][0-9]|2[0-3]):[0-5][0-9]$先行ゼロを強制する
Manan Mehta



3

驚くべきことに、0:0の短い形式の午前0時では機能せず、00:00でも機能しないものもあるので、実際にはこれらのすべてが完全にカバーされていないことがわかりました。以下を使用してテストしました。

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

2

次の正規表現を使用できます。

^(2[0-3]|[01]?[0-9]):([1-5]{1}[0-9])$

00:00を除外する場合は、この式を使用できます

^(2[0-3]|[01]?[0-9]):(0[1-9]{1}|[1-5]{1}[0-9])$

有効時間は00:01から00:59または0:01から23:59であるため、2番目の式の方が適しています。必要に応じてこれらのいずれかを使用できます。 Regex101リンク


最初の式は00を受け入れていない:05。しかし、ありがとう。私が探していた検証に導きます。
JazZ 2017

2

一致:

2:9
2:09
2:59
02:9
02:09
02:59
23:59

これを使って:

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

2:9または02:9はどのような時間ですか?
vs97

たとえば、C#には、DateTimeオブジェクトを文字列に変換するための非常に多くのオプションがあります。DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 。詳細については、リンクを
Pedram Ahmadpour

1

左端のビットをオプションにしたので、左端と右端のビットもオプションにしました。チェックしてください。

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

と一致する

0:0 
00:00
00:0 
0:00
23:59
01:00
00:59

ライブリンクはこちらから入手できます


0

次の正規表現を使用できます。

^[0-1][0-9]:[0-5][0-9]$|^[2][0-3]:[0-5][0-9]$|^[2][3]:[0][0]$

0

宣言する

private static final String TIME24HOURS_PATTERN = "([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]";

public boolean validate(final String time) {
    pattern = Pattern.compile(TIME24HOURS_PATTERN);
    matcher = pattern.matcher(time);
    return matcher.matches();
}

このメソッドは、文字列が正規表現と一致する場合に「true」を返します。


0

上記のManish M Demblaniの貢献を少し変更すると、午前4時に処理されます(アプリケーションでは必要ないため、秒のセクションを削除しました)。

^(([0-1]{0,1}[0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[1-9]|1[0-2])(:|\.)[0-5][0-9]( )?(AM|am|aM|Am|PM|pm|pM|Pm))|(([0]?[0-9]|1[0-9]|2[0-3])(:|\.)[0-5][0-9]))$

ハンドル:4am 4 am 4:00 4:00 am 4:00 pm 4.30 amなど


1
AM|am|aM|Am|PM|pm|pM|Pm=[AaPp][Mm]
エド・モートン


-1

鉱山は:

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

これはずっと短い

いくつかの例でテストしました

一致:

  • 00:00
  • 7:43
  • 07:43
  • 19:00
  • 18:23

また、25:76などの無効なインスタンスとは一致しません...


09:30一致しません

独自の例00:00と07:43は一致しません。
Christiaan Westerbeek

-1

以下を試すことができます

^\d{1,2}([:.]?\d{1,2})?([ ]?[a|p]m)?$

次のパターンを検出できます。

2300 
23:00 
4 am 
4am 
4pm 
4 pm
04:30pm 
04:30 pm 
4:30pm 
4:30 pm
04.30pm
04.30 pm
4.30pm
4.30 pm
23:59 
0000 
00:00

-1

ユーザーが指定したタイムスタンプを探すために私が作成したこのマスターフルタイムスタンプ検出器の正規表現を確認してください。ピックアップする内容の例には次のものが含まれますが、これに限定されません。

8:30-9:40
09:40-09 : 50
09 : 40-09 : 50
09:40 - 09 : 50
08:00to05:00
08 : 00to05 : 00
08:00 to 05:00
8am-09pm
08h00 till 17h00
8pm-5am
08h00,21h00
06pm untill 9am

時間に数字が含まれている限り、さらに多くの情報が集まります


1
RegExr requires a modern browser. Please update your browser to the latest version and try again....私もそれを見ることができません...:-/
マーティンTournoij

-3

以下をお試しください

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

注:私はjavascript regexエンジンを想定していました。それと異なる場合はお知らせください。


-3

次の正規表現を使用できます:

^[0-2]?[0-3]:[0-5][0-9]$

私が行った変更のみ、左端の桁はオプションです。残りの正規表現は同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.