質問

解析したい 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秒で20:30:12パスを入力すると[HH:MM:SS
  4. 78:12に入ると、78分を通過しないでください。

基本的に、1つの「:」が見つかった場合、「前の数字」:「mm、number after ":" as 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$)

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

役に立ちましたか?

解決

^(?:(?:([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

他のヒント

@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))? - オプションで秒一致します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top