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.

Klicken Sie auf Upvote
quelle
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]$
Peter O.
quelle
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

Niket Pathak
quelle
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)

Tomer
quelle
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])?$
Bahman Khalafi
quelle
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]$
Nikhil Rawat
quelle
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]$
user3229770
quelle
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

Ved
quelle
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])$
Pedram Ahmadpour
quelle
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

gdmanandamohon
quelle
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]$
Basavaraj
quelle
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.

user3481495
quelle
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.

Bob Light
quelle
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]$
TobiasDeVil
quelle
-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.


quelle
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
Manish M Demblani
quelle
-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

pythonian29033
quelle
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.

JaredPar
quelle
-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.

Shekhar
quelle