Expression régulière pour faire correspondre le format d'heure HH: MM


166

Je veux une expression régulière pour le temps correspondant au format HH: MM. Voici ce que j'ai et cela fonctionne:

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

Cela correspond à tout de 00h00 à 23h59.

Cependant, je veux le changer pour que 0:00 et 1:00, etc. correspondent également ainsi que 00:00 et 01:30. C'est-à-dire que le chiffre le plus à gauche est facultatif, pour correspondre à HH: MM ainsi qu'à H: MM.

Des idées pour faire ce changement? J'ai besoin que cela fonctionne en javascript ainsi qu'en php.


15
En fait, votre expression régulière d'origine ne correspondra pas à toute une plage de valeurs de temps valides, par exemple 17:00
David Clarke

Réponses:


366

Votre expression régulière d'origine a des défauts: elle ne correspondrait pas 04:00par exemple.

Cela peut fonctionner mieux:

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

45
Cette regExp est pour le temps sans zéro non significatif. RegExp pour le temps avec zéro non ^([0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
significatif

15
@SergO, veuillez lire sa réponse plus attentivement. Sa réponse est à la fois pour un zéro non significatif et sans.
Alexander

11
Une forme légèrement plus courte est^(?:\d|[01]\d|2[0-3]):[0-5]\d$
Billy Jo

2
Fonctionne également très bien en C #.
Richard Ev

10
@SergO ne devrait-il pas être ^ (0 [0-9] | 1 [0-9] | 2 [0-3]): [0-5] [0-9] $?
Martin

58

Expressions régulières pour le temps

  • HH: format 12 heures MM, début 0 en option

    /^(0?[1-9]|1[0-2]):[0-5][0-9]\d$/
  • HH: format 12 heures MM, début facultatif 0, méridiems obligatoires (AM / PM)

    /((1[0-2]|0?[1-9]):([0-5][0-9]) ?([AaPp][Mm]))/
  • HH: MM 24 heures avec 0 en tête

    /^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: format 24 heures MM, début 0 en option

    /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
  • HH: MM: SS Format 24 heures avec 0 en tête

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

Référence et démo


4
Je vous remercie! Cette réponse devrait au sommet.
Marc

N'importe quelle raison HH: MM 24 heures avec 0 non ^([0-2][0-3]|[0-1][0-9]):[0-5][0-9]+$significatif?
Vlad Macovei

Parce que l'expression régulière dans la réponse fonctionne bien. Et celui que vous avez commenté fonctionne aussi. N'hésitez pas à utiliser l'un ou l'autre. :)
Niket Pathak

Pour les personnes qui correspondent aux chaînes de 12 heures (avec am / pm) avec l'expression régulière ci-dessus, gardez à l'esprit que le test de "13:00 PM" par rapport à l'expression régulière renverra true (certaines valeurs) car la partie "15:00" de la chaîne est valide. J'ai résolu le problème en utilisant l'instruction if suivante let res = value.match (regex); if (res && res [0] === valeur) doSomething ();
Taha Rehman Siddiqui

49

Aucune de ces réponses n'a fonctionné pour moi. Au final, j'ai utilisé:

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

Logique:

Le premier nombre (heures) est soit: un nombre entre 0 et 19 -> [0-1]?[0-9](permettant un numéro à un chiffre)
soit
un nombre entre 20 - 23 ->2[0-3]

le deuxième nombre (minutes) est toujours un nombre entre 00 et 59 -> [0-5][0-9](ne permettant pas un seul chiffre)


8
Vous n'avez pas besoin du tiret dans le premier crochet, [01]fonctionne aussi bien;)
Czechnology

3
Voici cette réponse révisée pour n'accepter que 12 heures (y compris les zéros non ^(0?[1-9]|1[0-2]):[0-5][0-9]$
significatifs

^([0-1][0-9]|2[0-3]):[0-5][0-9]$forcer un zéro non
significatif

8

Vous pouvez utiliser celui-ci 24H, les secondes sont facultatives

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

4

Le mieux serait pour HH: MM sans prendre aucun risque.

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

cela pourrait-il être abrégé ^([0-1]\d|2[0-3]):[0-5]\d$?
AlbinoDrought

3

Étonnamment, j'ai trouvé que tout cela ne le couvrait pas tout à fait, car ils ne fonctionnent pas pour un format plus court minuit de 0: 0 et quelques-uns ne fonctionnent pas non plus pour 00:00, j'ai utilisé et testé ce qui suit:

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

2

Vous pouvez utiliser cette expression régulière:

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

Si vous souhaitez exclure 00:00, vous pouvez utiliser cette expression

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

La deuxième expression est la meilleure option car l'heure valide est 00:01 à 00:59 ou 0:01 à 23:59. Vous pouvez utiliser l'un de ces éléments selon vos besoins. Lien Regex101


La première expression n'accepte pas 00: 05 . Mais merci. M'amène à la validation que je recherchais.
JazZ

2

Allumettes:

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

Utilise le:

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

quel genre de temps est 2: 9 ou 02: 9?
vs97

par exemple, en C #, il y a tellement d'options pour convertir un objet DateTime en chaîne. DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1); Console.WriteLine(date1.ToString("H:mm:ss", CultureInfo.InvariantCulture)); // Displays 6:09:01 . pour plus d'informations, voir le lien
Pedram Ahmadpour

1

Comme vous l'avez demandé le plus à gauche en option, j'ai fait le plus à gauche et le plus à droite en option aussi, vérifiez-le

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

Il correspond avec

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

Le lien en direct est disponible ici


0

Vous pouvez utiliser l'expression régulière suivante:

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

0

Déclarer

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

Cette méthode renvoie "true" lorsque la chaîne correspond à l'expression régulière.


0

Une légère modification de la contribution de Manish M Demblani ci-dessus gère 4h du matin (je me suis débarrassé de la section des secondes car je n'en ai pas besoin dans mon application)

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

poignées: 4h00 4h00 4h00 4h00 16h00 4h30 etc.


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

0

Le regex ci-dessous aidera à valider le format hh: mm

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

-1

Le mien est:

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

C'est beaucoup plus court

Je l'ai testé avec plusieurs exemples

Rencontre:

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

Et ne correspond à aucune instance invalide telle que 25:76, etc.


09:30ne correspondent pas
Vert

Vos propres exemples 00:00 et 07:43 ne correspondent pas.
Christiaan Westerbeek

-1

Vous pouvez essayer ce qui suit

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

Il peut détecter les modèles suivants:

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

vérifiez cette regex de détecteur d'horodatage maître que j'ai construite pour rechercher un horodatage spécifié par l'utilisateur, des exemples de ce qu'il va récupérer, mais ce n'est certainement PAS limité à;

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

Il en ramassera également beaucoup plus, tant que les heures incluent des chiffres


1
RegExr requires a modern browser. Please update your browser to the latest version and try again.... Je ne peux même pas le voir ...: - /
Martin Tournoij

-3

Essayez ce qui suit

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

Remarque: je supposais le moteur javascript regex. Si c'est différent de cela, faites-le moi savoir.


-3

Vous pouvez utiliser l'expression régulière suivante:

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

La seule modification que j'ai faite est le chiffre le plus à gauche est facultative. Le reste de l'expression régulière est le même.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.