2

javascriptのさまざまな時間形式 (時間追跡 Web アプリ用) に一致する正規表現を探しています。ユーザーは、次のいずれかの形式で時刻を挿入できます。

h
hh:mm
hh.mm

hh:mm と hh.mm に一致する正規表現を簡単に作成できますが、1 時間形式が機能しません。

これは私の現在の正規表現です: ([0-2][0-9])(.|:)([0-5][0-9])

使用できる文字: 0-9.および:. ユーザーが他の文字を入力すると、検証は失敗するはずです。

誰か提案はありますか?

編集

次の形式で動作するはずです。

h:mm (3:30)

ソリューション: http://regexr.com?31gc3

4

7 に答える 7

3

ブロックを に配置することで、ブロックをオプションにすること( ... )?( ... ){0,1}できます。

あなたの式は次のようになります。

/([0-2][0-9])((.|:)([0-5][0-9]))?/

12これは 、12:30および に一致し12.30ます。55:30、またはには一致しません5.30。1 桁の時間入力を有効にするには、最初の桁をオプションにします。

/([0-2]?[0-9])((.|:)([0-5][0-9]))?/

を使用している場合.matchは、5 つの結果があることがわかります。

["12:30", "12", ":30", ":", "30"]

( ... )に変わるときに不要なマッチングを排除することで、それを3つに減らすことができます(?: ... )

/([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?/

これにより、以下が得られます。

["12:30", "12", "30"]

アップデート

更新に基づいて、境界を一致させたいと考えています。これを行うにはいくつかの方法があります。

  1. で開始する^と、式の先頭が各行/文字列の先頭に結び付けられます。
  2. $で終わると、式の末尾が文字列の末尾に結び付けられます。
  3. で始まるか終わると\b、エッジが「境界」に対してあることが義務付けられます。

それをすべてまとめると:

日付のみを含む行を一致させたい場合は、次のようにします。

/^([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?$/

これは、「hello 1.30」または「1.30 hello」をキャッチしません。

日付で始まる行を一致させたい場合は、次を使用できます。

/^([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?/

しかし、これは「1.30000」に一致します。

行頭の日付を探している場合の最善の策は次のとおりです。

/^([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?\b/

「1.30 test」には一致しますが、「1.300000」には一致しません。残念ながら、「1.30.30」にも一致しますが、これは JavaScript の RegExp プロセッサの制限です。

文字列内の時間を探している場合、これは次のようになります。

/\b([0-2]?[0-9])(?:(?:.|:)([0-5][0-9]))?\b/

「test 1.30 test」は、「.10.10.10」のような一致する不幸なケースと一致します。

于 2012-07-10T19:04:35.947 に答える
2

24時間形式か12時間形式かはわかりませんhが、24時間はこれでうまくいき、/^([2][0-3]|[01]?[0-9])([.:][0-5][0-9])?$/12時間はこれでうまくいきます-これ/^([1][0-2]|[0]?[0-9])([.:][0-5][0-9])?$/

于 2012-07-10T19:12:13.030 に答える
1

何もキャプチャする必要がない場合は、これを使用してください。

/[0-2]?\d[.:][0-5]\d/

ここで実際に見てください:http://regexr.com?31g9u


時間と分をキャプチャしたい場合は、これを使用します。

/([0-2]?\d)[.:]([0-5]\d)/

キャプチャに他の要件がある場合は、具体的に記入してください。


更新:分が指定されていない場合、1 桁の時間だけが必要になる可能性があることに気付きました。その場合は、これを使用します。

/^(?:\d|[0-2]\d[.:][0-5]\d)$/

ここで実際に見てください:http://regexr.com?31ga1


のようなものに一致させたいが9:42、1 桁の数字にも一致させたい場合は、次のようにします。

/^(?:\d|[0-2]?\d[.:][0-5]\d)$/

ここで実際に見てください:http://regexr.com?31ga7

于 2012-07-10T19:01:36.367 に答える
1

この正規表現を使用します([0-2]\d)(\.|:)([0-5]\d)

于 2012-07-10T19:02:30.167 に答える
0

a を使用?して何かをオプションにします。あなたの場合、次のようなものが必要です

([0-1]?[0-9])(\.|:)([0-5][0-9])

を追加する?と、5:30 などを受け入れることができます。

編集: また、 は任意の文字.を表すため、エスケープする必要があります。代わりに使用することもできます\d[0-9]

于 2012-07-10T19:01:33.100 に答える
0

右括弧の間でない場合、ドットをエスケープする必要があります [0-9] は \d と同等です

/(\d|[01]\d|2[0-3])([:.][0-5]\d)?/
于 2012-07-10T19:01:54.023 に答える
0

これは、12 時間形式と時間のみに一致します。

(([01]?[0-9]|2[0-3])[:.][0-5][0-9])|([01]?[0-9]|2[0-3])

5      Pass
5.55   Pass
01.4   FAIL
01:59  Pass
1:45   Pass

24時間ならコロンの前の部分が([01]?[0-9]|2[0-3])

于 2012-07-10T19:06:47.730 に答える