web-dev-qa-db-ja.com

HH:MM:SS時間文字列の正規表現パターン

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

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

  1. 56と入力すると、56秒と見なすことができるため、合格となります[SS]
  2. 2:3または02:03または02:3または2:03を入力すると、パスするはずです。 2分3秒[MM:SS]
  3. 20時間30分12秒で20:30:12パスを入力した場合[HH:MM:SS]
  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$)

正常に動作しているようです。私は仕事をすることができる他のより単純な正規表現を知りたいと思いました。

36
user418836
^(?:(?:([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
112
Tim Pietzcker

@Tim Pietzckerは、SSが必須であるHH:MM:SSパーサーに対するOPの要件をカバーしています。

  • HH:MM:SS
  • MM:SS
  • SS

OPの要件から少し逸脱することを許可し、HHが必須の場合、つまり.

  • HH
  • HH:MM
  • HH:MM:SS

私が思いついた正規表現は:

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

分解しましょう:

  • ([0-1]?\d|2[0-3])-時間に一致
  • (?::([0-5]?\d))?-オプションで数分間一致
  • (?::([0-5]?\d))?-オプションで秒に一致
6
Stephen Quan