50

文字列を解析したいhh:mm:ss。単純なものは([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d) 、期待2:3:24または02:03:24文字列です。

次のような場合でも、さらに一歩進んで検証に合格したい

  1. 56 は 56 秒と見なすことができるため、56 だけを入力した場合は合格です [SS]
  2. 2:3 または 02:03 または 02:3 または 2:03 を入力すると、合格するはずです。2分3秒 [MM:SS]
  3. 20 時間 30 分 12 秒 [HH:MM:SS] で 20:30:12 パスを入力した場合
  4. 78:12 と入力すると、78 分を渡さないでください。間違っています....

基本的に、「:」が1つ見つかった場合、「:」の前の数字をMM、「:」の後の数字をSSと見なします。「:」が 2 つ見つかった場合は、HH:MM:SS と見なします

このパターンを思いつきました。

(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)

うまくいっているようです。仕事をすることができる他のより単純な正規表現を知りたかった.

4

2 に答える 2

144
^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$

説明:

^                   # 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
于 2011-11-29T22:03:22.420 に答える