Espressione regolare per la corrispondenza del formato orario HH: MM


166

Voglio un regexp per il tempo corrispondente in formato HH: MM. Ecco quello che ho, e funziona:

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

Questo corrisponde a tutto, dalle 00:00 alle 23:59.

Tuttavia, voglio cambiarlo in modo che anche 0:00 e 1:00, ecc. Siano abbinati così come 00:00 e 01:30. Vale a dire rendere facoltativa la cifra più a sinistra, per abbinare HH: MM e H: MM.

Qualche idea su come apportare questo cambiamento? Ho bisogno che funzioni per javascript e php.


15
In realtà il tuo regexp originale non corrisponderà a un intero intervallo di valori di tempo validi, ad es. 17:00
David Clarke,

Risposte:


366

La tua espressione regolare originale ha dei difetti: non corrisponderebbe 04:00per esempio.

Questo potrebbe funzionare meglio:

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

45
Questo regExp è per il tempo senza zero iniziale. RegExp per il tempo con zero iniziale è^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
SergO

15
@SergO, leggi la sua risposta con più attenzione. La sua risposta è sia per uno zero iniziale che senza.
Alexander,

11
Una forma leggermente più corta è^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Billy Jo,

2
Funziona bene anche in C #.
Richard Ev,

10
@SergO non dovrebbe essere ^ (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $?
Martin,

58

Espressioni regolari per il tempo

  • HH: formato MM 12 ore, 0 iniziale opzionale

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH: formato MM 12 ore, 0 iniziale opzionale, meridiani obbligatori (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH: MM 24 ore con 0 iniziale

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: formato MM 24 ore, 0 iniziale opzionale

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM: formato SS 24 ore con 0 iniziale

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

Riferimenti e demo


4
Grazie! Questa risposta dovrebbe essere al top.
Marc,

Qualsiasi motivo HH: MM 24 ore con 0 iniziale non lo è ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$?
Vlad Macovei,

Perché la regex nella risposta funziona bene. E anche quello che hai commentato funziona. Sentiti libero di usare uno di loro. :)
Niket Pathak il

Per le persone che corrispondono a stringhe di 12 ore (con am / pm) con la regex sopra, tieni presente che il test "13:00 PM" contro la regex restituirà true (alcuni valori) perché la parte "3:00 PM" nella stringa è valido. Ho risolto il problema utilizzando la seguente istruzione if let res = value.match (regex); if (res && res [0] === value) doSomething ();
Taha Rehman Siddiqui il

49

Nessuna delle precedenti ha funzionato per me. Alla fine ho usato:

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

Logica:

Il primo numero (ore) è: un numero compreso tra 0 e 19 -> [0-1]?[0-9](che consente il numero a una cifra)
o
un numero compreso tra 20 e 23 ->2[0-3]

il secondo numero (minuti) è sempre un numero compreso tra 00 e 59 -> [0-5][0-9](non consente una sola cifra)


8
Non è necessario il trattino nella prima parentesi quadra, [01]funziona altrettanto bene;)
Czechnology

3
Ecco questa risposta rivista per accettare solo 12 ore (compresi gli zeri ^(0?[1-9]|1[0-2]):[0-5][0-9]$
iniziali

^([0-1][0-9]|2[0-3]):[0-5][0-9]$per forzare uno zero iniziale
Manan Mehta

8

Puoi usarlo 24H, i secondi sono opzionali

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

4

Il migliore sarebbe per HH: MM senza correre alcun rischio.

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

questo potrebbe essere abbreviato in ^([0-1]\d|2[0-3]):[0-5]\d$?
Albino Siccità

3

Incredibilmente ho scoperto che in realtà tutti questi non lo coprono del tutto, poiché non funzionano per la mezzanotte in formato più breve di 0: 0 e alcuni non funzionano neanche per le 00:00, ho usato e testato quanto segue:

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

2

Puoi usare questa espressione regolare:

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

Se si desidera escludere 00:00, è possibile utilizzare questa espressione

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

La seconda espressione è l'opzione migliore perché il tempo valido è da 00:01 a 00:59 o da 0:01 a 23:59. È possibile utilizzare uno di questi su richiesta. Link Regex101


La prima espressione non accetta 00: 05 . Ma grazie. Mi porta alla convalida che stavo cercando.
JazZ,

2

gli incontri:

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

Usalo:

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

che tipo di tempo è 2: 9 o 02: 9?
vs97

ad esempio in C # ci sono così tante opzioni per convertire l'oggetto DateTime in stringa. DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 . per ulteriori informazioni consultare il link
Pedram Ahmadpour,

1

Come hai chiesto il bit più a sinistra opzionale, ho fatto anche il più a sinistra e anche il più a destra opzionale, dai un'occhiata

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

Si abbina a

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

Il link live è disponibile qui


0

Puoi usare la seguente regex:

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

0

Dichiarare

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

Questo metodo restituisce "true" quando String corrisponde all'espressione regolare.


0

Una leggera modifica al contributo di Manish M Demblani sopra gestisce le 4 del mattino (mi sono sbarazzato della sezione dei secondi perché non ne ho bisogno nella mia applicazione)

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

maniglie: 4:00 4:00 4:00 4:00 16:00 4.30 ecc.


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

0

Il regex seguente aiuterà a validare il formato hh: mm

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

-1

Il mio è:

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

Questo è molto più breve

L'ho testato con diversi esempi

Incontro:

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

E non corrisponde ad alcuna istanza non valida come 25:76 ecc ...


09:30non corrispondono
Green

I tuoi esempi 00:00 e 07:43 non corrispondono.
Christiaan Westerbeek,

-1

Puoi provare quanto segue

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

Può rilevare i seguenti schemi:

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

controlla questo regex rivelatore di timestamp magistrale che ho creato per cercare un timestamp specificato dall'utente, esempi di cosa includerà il pickup, ma sicuramente NON è limitato a;

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

Raccoglierà anche molti altri, purché i tempi includano cifre


1
RegExr requires a modern browser. Please update your browser to the latest version and try again.... Non riesco nemmeno a vederlo ...: - /
Martin Tournoij,

-3

Prova quanto segue

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

Nota: stavo assumendo il motore regex javascript. Se è diverso, per favore fatemelo sapere.


-3

Puoi usare la seguente regex:

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

Solo la modifica che ho apportato è la cifra più a sinistra è facoltativa. Il resto della regex è lo stesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.