Regulärer Ausdruck für das passende HH: MM-Zeitformat


165

Ich möchte einen regulären Ausdruck für die passende Zeit im HH: MM-Format. Folgendes habe ich und es funktioniert:

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

Dies passt alles von 00:00 bis 23:59.

Ich möchte es jedoch so ändern, dass 0:00 und 1:00 usw. ebenso wie 00:00 und 01:30 übereinstimmen. Das heißt, die am weitesten links stehende Ziffer optional zu machen, um sowohl HH: MM als auch H: MM zu entsprechen.

Irgendwelche Ideen, wie man diese Änderung vornehmen kann? Ich brauche dies, um sowohl in Javascript als auch in PHP zu arbeiten.


15
Tatsächlich stimmt Ihr ursprünglicher regulärer Ausdruck nicht mit einem ganzen Bereich gültiger Zeitwerte überein, z. B. 17:00
David Clarke,

Antworten:


366

Ihr ursprünglicher regulärer Ausdruck weist Fehler auf: Er würde 04:00zum Beispiel nicht übereinstimmen .

Dies kann besser funktionieren:

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

45
Dieser regExp ist für die Zeit ohne führende Null. RegExp für Zeit mit führender Null ist^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO

15
@SergO bitte lesen Sie seine Antwort genauer durch. Seine Antwort ist sowohl für eine führende Null als auch ohne.
Alexander

11
Eine etwas kürzere Form ist^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Billy Jo

2
Funktioniert auch gut in C #.
Richard Ev

10
@SergO sollte das nicht ^ sein (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $?
Martin

56

Reguläre Ausdrücke für die Zeit

  • HH: MM 12-Stunden-Format, optional führende 0

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH: MM 12-Stunden-Format, optional führende 0, obligatorische Meridiems (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH: MM 24 Stunden mit führender 0

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM 24-Stunden-Format, optional führende 0

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM: SS 24-Stunden-Format mit führender 0

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

Referenz und Demo


4
Danke dir! Diese Antwort sollte oben stehen.
Marc

Irgendein Grund HH: MM 24 Stunden mit führender 0 ist das nicht ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$?
Macovei Vlad

Weil der reguläre Ausdruck in der Antwort gut funktioniert. Und der, den Sie kommentiert haben, funktioniert auch. Fühlen Sie sich frei, einen von ihnen zu verwenden. :)
Niket Pathak

Beachten Sie bei Personen, die 12-Stunden-Zeichenfolgen (mit am / pm) mit der obigen Regex abgleichen, dass das Testen von "13:00 PM" gegen die Regex true (einige Werte) zurückgibt, da der Teil "3:00 PM" in der Zeichenfolge ist gültig. Ich habe das Problem mithilfe der folgenden if-Anweisung behoben: let res = value.match (regex); if (res && res [0] === value) doSomething ();
Taha Rehman Siddiqui

49

Keines der oben genannten hat bei mir funktioniert. Am Ende habe ich verwendet:

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

Logik:

Die erste Zahl (Stunden) ist entweder: eine Zahl zwischen 0 und 19 -> [0-1]?[0-9](erlaubt eine einstellige Zahl)
oder
eine Zahl zwischen 20 - 23 ->2[0-3]

Die zweite Zahl (Minuten) ist immer eine Zahl zwischen 00 und 59 -> [0-5][0-9](ohne eine einzige Ziffer)


8
Sie brauchen den Bindestrich in der ersten eckigen Klammer nicht, [01]funktioniert genauso gut;)
Czechnology

3
Hier ist diese Antwort überarbeitet, um nur 12 Stunden Zeit zu akzeptieren (einschließlich optionaler führender Nullen):^(0?[1-9]|1[0-2]):[0-5][0-9]$
rgbflawed

^([0-1][0-9]|2[0-3]):[0-5][0-9]$eine führende Null erzwingen
Manan Mehta

8

Sie können diese 24H verwenden, Sekunden sind optional

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

4

Das Beste wäre für HH: MM, ohne ein Risiko einzugehen.

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

könnte dies auf verkürzt werden ^([0-1]\d|2[0-3]):[0-5]\d$?
AlbinoDrought

3

Erstaunlicherweise habe ich festgestellt, dass all dies nicht ganz abdeckt, da sie nicht für ein kürzeres Format von Mitternacht von 0: 0 funktionieren und einige auch nicht für 00:00. Ich habe Folgendes verwendet und getestet:

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

2

Sie können diesen regulären Ausdruck verwenden:

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

Wenn Sie 00:00 ausschließen möchten, können Sie diesen Ausdruck verwenden

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

Der zweite Ausdruck ist eine bessere Option, da die gültige Zeit 00:01 bis 00:59 oder 0:01 bis 23:59 ist. Sie können diese nach Ihren Wünschen verwenden. Regex101 Link


Der erste Ausdruck akzeptiert nicht 00: 05 . Aber danke. Führt mich zu der Validierung, die ich gesucht habe.
JazZ

2

Streichhölzer:

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

Benutze es:

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

Was für eine Zeit ist 2: 9 oder 02: 9?
vs97

In C # gibt es beispielsweise so viele Optionen, um ein DateTime-Objekt in eine Zeichenfolge zu konvertieren. DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 . Weitere Informationen finden Sie unter Link
Pedram Ahmadpour

1

Da Sie das Bit ganz links optional gefragt haben, habe ich es auch ganz links und ganz rechts optional gemacht

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

Es passt zu

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

Der Live-Link ist hier verfügbar


0

Sie können folgenden regulären Ausdruck verwenden:

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

0

Erklären

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();
}

Diese Methode gibt "true" zurück, wenn der String mit dem regulären Ausdruck übereinstimmt.


0

Eine geringfügige Änderung des Beitrags von Manish M Demblani über 4 Uhr morgens (ich habe den Sekundenabschnitt entfernt, da ich ihn in meiner Bewerbung nicht benötige).

^(([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]))$

Griffe: 4 Uhr 4 Uhr 4 Uhr 4 Uhr 4 Uhr 4 Uhr 4 Uhr 30 Uhr usw.


1
AM|am|aM|Am|PM|pm|pM|Pm=[AaPp][Mm]
Ed Morton

0

Der folgende reguläre Ausdruck hilft bei der Validierung des hh: mm-Formats

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

-1

Meins ist:

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

Das ist viel kürzer

Habe es mit mehreren Beispielen getestet

Spiel:

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

Und passt nicht zu einer ungültigen Instanz wie 25:76 usw.


09:30nicht übereinstimmen
Grün

Ihre eigenen Beispiele 00:00 und 07:43 stimmen nicht überein.
Christiaan Westerbeek

-1

Sie können Folgendes versuchen

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

Es kann die folgenden Muster erkennen:

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

Überprüfen Sie diesen Masterfull-Zeitstempel-Detektor- Regex, den ich erstellt habe, um nach einem benutzerdefinierten Zeitstempel zu suchen. Beispiele für die Aufnahme sind, aber definitiv NICHT beschränkt auf;

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

Es wird auch viel mehr aufnehmen, solange die Zeiten Ziffern enthalten


1
RegExr requires a modern browser. Please update your browser to the latest version and try again.... Ich kann es nicht einmal sehen ...: - /
Martin Tournoij

-3

Versuche Folgendes

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

Hinweis: Ich habe die Javascript-Regex-Engine angenommen. Wenn es anders ist, lass es mich wissen.


-3

Sie können folgenden regulären Ausdruck verwenden:

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

Nur die Änderung, die ich vorgenommen habe, ist optional. Der Rest der Regex ist der gleiche.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.