I sympathise with 'non-regex' solutions in many situations.
(a) firstly, sometimes the cost of regexes can't be ignored. It's fun to write, but the library has a lot of work to do. Regular expressions are popular, but 'simplest' is not always the most efficient.
(b) secondly, often the second phase is to use the data, and sooner or later some form of parsing the data WITHIN the data comes up. E.g. whether <24 and <59. One can work oneself up to the elbows for pure sport (it is possible to write such an expression - it will be huge, who knows how to preserve it).
Often a mini-parser is the correct solution, and many of them cost a minimal amount of CPU and very often no RAM at all. It does two things: it confirms correctness and uses the data.
My personal version would go like this
.