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.

Cliquez sur Upvote
la source
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]$
Peter O.
la source
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

Niket Pathak
la source
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)

Tomer
la source
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])?$
Bahman Khalafi
la source
4

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

^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
Nikhil Rawat
la source
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]$
user3229770
la source
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

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

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

user3481495
la source
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.

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


la source
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
Manish M Demblani
la source
-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

pythonien29033
la source
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.

JaredPar
la source
-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.

Shekhar
la source