1

時間入力を確認したいアプリケーションがあります。分(m、0〜9999)および秒(s、0〜59)で許可されるフォームは次のとおりです。

s
ss
m:ss
...
mmmm:ss

私が持っている現在の正規表現は次のとおりです。

^([0-9]){0,4}(?=\:)\:?([0-5]){0,1}([0-9]){1}|([0-5]){0,1}([0-9]){1}$

これは上記のすべてに一致しますが、一致するとは思わない

:ss

最後のものと一致しないことは重要ではありませんが、私:ssは疑問に思います:なぜそれが最後のものと一致するのですか(そして、その場合を除外するために正規表現を変更することをどのように提案しますか?)

4

2 に答える 2

2

これを試して:

^(?:\d{1,4}:)?[0-5]?\d$

:以前は、少なくとも1桁前に一致した場合にのみ、コロン( )に一致します。パターンでは、先頭に数字がないコロンを使用できるため、テキストをコロンで始めることができます。

実例: http: //rubular.com/r/rFROIed8Pg

トリッキーなオプションは次のとおりです^\b\d{0,4}:?[0-5]?\d$。これにより、コロンと分がオプションになりますが、文字列の先頭のコロンとは一致しません。


コメントに関するいくつかの追加の説明:

mmm:s(1秒の数字)を禁止するための1つの可能なパターンは次のとおりです。

^(?:\d{1,4}:(?=\d{2}))?[0-5]?\d$

簡単な説明:

  • 終わりは簡単です:[0-5]?\d$-0-59
  • 最初の部分はトリッキーです:
    • \d{1,4}:-1〜4桁の数字とコロンを一致させます。
    • (?=\d{2})-ただし、コロンの後に2桁が続く場合のみ!これは先読みです。コロンの後に1桁しかない場合は、失敗します。
于 2012-08-08T13:19:11.253 に答える
1

これは一致すると言います

^([0-9]){0,4}(?=\:)\:?([0-5]){0,1}([0-9]){1}

また

([0-5]){0,1}([0-9]){1}$

代わりにこれを試してください

^([0-9]){0,4}(?=\:)\:?([0-5]){0,1}([0-9]){1}|:?([0-5]){0,1}([0-9]){1}$
于 2012-08-08T13:15:55.730 に答える