I want to parse a hh:mm:ss
string. A simple one is ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)
which expects 2:3:24
or 02:03:24
string.
I want to take it a step further and pass the validation even in cases like
Basically, if one ":" is found, consider number before ":" as MM and number after ":" as SS . If two ":" are found consider as HH:MM:SS
I came up with this pattern.
(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)
It seems to be working fine. I wanted to know any other simpler regular expression, that can do the job.
$ means "Match the end of the string" (the position after the last character in the string).
Adding to @Greg Hewgill answer: if you want to be able to match both date-time and only date, you can make the "time" part of the regex optional: (\d{4})-(\d{2})-(\d{2})( (\d{2}):(\d{2}):(\d{2}))?
A regular expression (regex) defines a search pattern for strings. The search pattern can be anything from a simple character, a fixed string or a complex expression containing special characters describing the pattern.
Basically (0+1)* mathes any sequence of ones and zeroes. So, in your example (0+1)*1(0+1)* should match any sequence that has 1. It would not match 000 , but it would match 010 , 1 , 111 etc. (0+1) means 0 OR 1.
^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
Explanation:
^ # Start of string (?: # Try to match... (?: # Try to match... ([01]?\d|2[0-3]): # HH: )? # (optionally). ([0-5]?\d): # MM: (required) )? # (entire group optional, so either HH:MM:, MM: or nothing) ([0-5]?\d) # SS (required) $ # End of string
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With