Regex heure sur 24 heures (HH:MM:SS)
La norme HTML (WHATWG) définit la « chaîne d'heure valide » : deux chiffres d'heure de 00 à 23, deux points, deux chiffres de minute de 00 à 59, puis facultativement deux points, deux chiffres de seconde de 00 à 59 et, après les secondes, un point et 1 à 3 chiffres de fraction. Les secondes 60 et 61 sont exclues. Les tentatives relues divergent : validator.js et jQuery Validation acceptent l'heure sans zéro initial (« 9:05 »), jQuery Validation accepte même « 7:30:15 » mais pas « 14:30:15.5 », et le motif d'ajv-formats exige les secondes et un décalage facultatif sans borner les valeurs (« 99:99:99 » passe, le contrôle est fait ensuite dans le code). Voici un motif conforme à la norme HTML, comparé à ces tentatives.
/^(?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9](?:\.[0-9]{1,3})?)?$/passe 28/28 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| validator.js (isTime, hour24) — zéro initial facultatif : « 9:05 » passe ; secondes absentes du mode par défaut (« 07:45:30 » refusé) | ^([01]?[0-9]|2[0-3]):([0-5][0-9])$ | 22 / 28 | sûr |
| jquery-validation (time) — « 9:05 » et « 7:30:15 » acceptés (heure à 1 chiffre) ; fraction des secondes refusée | ^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$ | 24 / 28 | sûr |
| ajv-formats (TIME) — forme seulement, valeurs non bornées (« 99:99:99 » passe, bornes contrôlées ensuite en code) ; secondes obligatoires : « 12:30 » refusé | ^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$ | 20 / 28 | sûr |
Implémentation
const re = new RegExp("^(?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9](?:\\.[0-9]{1,3})?)?$", "");
re.test(input);Limites
- Valide seulement la FORME 24 h. « 24:00 » (admis par ISO 8601 pour la fin d'une journée) et les secondes intercalaires (« 23:59:60 ») sont refusés, comme dans la norme HTML.
- Ni fuseau horaire (« Z », « +02:00 ») ni date : pour un instant complet, voir la fiche timestamp-iso8601. Le zéro initial est obligatoire.
- Une heure ne dit rien de son existence locale : certaines heures n'existent pas (passage à l'heure d'été) ou existent deux fois (retour à l'heure d'hiver).