211 votes

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

Je veux une expression rationnelle pour le temps correspondant au format HH: MM. Voici ce que j'ai et ça marche:

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

Cela correspond à tout de 00h00 à 23h59.

Cependant, je veux le changer pour que 00:00 et 1:00, etc. soient également appariés, 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 comment faire ce changement? J'ai besoin que cela fonctionne en javascript ainsi qu'en php.

435voto

Peter O. Points 9967

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

Cela peut fonctionner mieux:

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

51voto

Tomer Points 71

Aucun de ce qui précède 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 compris entre 0 et 19 -> [0-1]?[0-9] (permettant un numéro à un chiffre)
ou
un nombre compris entre 20 et 23 -> 2[0-3]

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

5voto

user3229770 Points 21

Étonnamment, j'ai trouvé que tous ces éléments ne couvraient pas tout à fait, car ils ne fonctionnaient pas pour un format plus court minuit à 0: 0 et quelques-uns ne fonctionnaient pas non plus pour 00:00, j'ai utilisé et testé les éléments suivants:

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

2voto

Ved Points 95

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 de 00h01 à 00h59 ou de 0h01 à 23h59. Vous pouvez utiliser n'importe lequel de ces éléments selon vos besoins.
JS-fiddle Link- JS Fiddle

-1voto

Đức Anh Points 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
  • 7h43
  • 07h43
  • 19h00
  • 18h23

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X