Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
604 views
in Technique[技术] by (71.8m points)

expression - 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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
^(?:(?:([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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...