Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex pattern for HH:MM:SS time string

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

  1. if you enter just 56, it should be pass, as 56 can be considered as 56 secs [SS]
  2. if you enter 2:3 or 02:03 or 02:3 or 2:03 it should pass. 2 minutes and 3 seconds [MM:SS]
  3. If you enter 20:30:12 pass with 20 hrs, 30 minutes and 12 secs [HH:MM:SS]
  4. if you enter 78:12 , do not pass 78 minutes is wrong....

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.

like image 551
user418836 Avatar asked Nov 29 '11 21:11

user418836


People also ask

What does '$' mean in regex?

$ means "Match the end of the string" (the position after the last character in the string).

Which regex pattern can be used to find the date and time?

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}))?

What is the regex for a string?

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.

What does regex 0 * 1 * 0 * 1 * Mean?

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.


1 Answers

^(?:(?:([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 
like image 178
Tim Pietzcker Avatar answered Sep 28 '22 19:09

Tim Pietzcker