beh, perché le regexpr che hai scritto dice:
"Dall'inizio della stringa, cerca un sottoinsieme di 2 caratteri e controlla che siano numeri, poi, dopo un ":", cerca un altro sottoinsieme di due caratteri e controlla che siano numeri, assicurati poi che la stringa finisca alla fine del secondo sottoinsieme."
Proprio per questo valida tutti i numeri a 2 cifre.
L'unico modo sicuro per farlo è utilizzare prima la regexpr che stai usando e, se supera il test, fai:
Dovrebbe andarecodice://metti di avere in str il value inserito dall'utente //ha già superato la tua regexpr var splitted = str.split(":"); var hour = parseInt(splitted[0]); var minute = parseInt(splitted[1]); return (!isNan(hour) && !isNan(minute) && hour < 24 && hour >= 0 && minute < 60 && minute >= 0);

Rispondi quotando