Поскольку вы запросили левый самый бит опционально, я делал левый самый и самый правый бит необязательно, проверьте его
^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]?$
Он совпадает с
0:0 00:00 00:0 0:00 23:59 01:00 00:59
Прямая ссылка доступна здесь