2

日時をテストするために、JavaScript関数で使用する正規表現を作成しようとしています。

次の形式の日付のみを許可したい:

YYYY-MM-DD HH:mm:ss
YYYY-MM-DDTHH:mm:ss
YYYY-MM-DD HH:mm
YYYY-MM-DDTHH:mm

これは、私がこれまでに達成できた限りです:

/^(19[0-9]{2}|2[0-9]{3})-(0[1-9]|1[012])-([123]0|[012][1-9]|31)[ \/T\/t]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/

それは私が望むことをしますが、オプションの秒で時間と分ではなく、時間、分、秒が必要です。

ご協力いただきありがとうございます!

あなたの生活を楽にするために、いくつかのテストデータを含む小さな jsFiddle を作成しました。パターン変数を更新して実行するだけで、テーブルが一致するはずです。

http://jsfiddle.net/smMJC/

4

2 に答える 2

3

更新:この回答を更新して、(...)を(?:...)に変更し、キャプチャが台無しにならないようにしました。

これを試して:

/^(19[0-9]{2}|2[0-9]{3})-(0[1-9]|1[012])-([123]0|[012][1-9]|31)[ \/T\/t]([01][0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9]))?$/

更新されたフィドル:http: //jsfiddle.net/smMJC/5/

私がしたことは変化していました

:([0-5][0-9])

に:

(?::([0-5][0-9]))?

これは、その部分をオプションにすることを意味します。(二重コロンは、(?: ... )?外側が非キャプチャグループで、内側が文字通りの「:」であるため、意図的なものです。

また、次のように変更することもできます。

[ \/T\/t]

に:

[ Tt]

次のような文字列を本当に一致させたい場合を除きます。

2013-01-01/15:30:30

Tの代わりにスラッシュを使用-これら2つのデモを比較します。

于 2013-01-23T09:22:03.237 に答える
1

変化する

  • [0-9]\d
  • 時間インジケーターを簡略化し[ t]、大文字と小文字を区別しない修飾子を追加します/.../i
  • :([0-5]\d)オプションまでの秒数(?::([0-5]\d))?

正規表現:

/^(19|2\d)\d\d-(0[1-9]|1[012])-([123]0|[012][1-9]|31)[ t]([01]\d|2[0-3]):([0-5]\d)(?::([0-5]\d))?$/i

JSFiddle

日時文字列の個々の部分をキャプチャする必要がない場合

  • ()可能な場合は括弧を削除してください
  • 必要に応じて、括弧()を非キャプチャに置き換えます(?:...)

正規表現:

/^(?:19|2\d)\d\d-(?:0[1-9]|1[012])-(?:[123]0|[012][1-9]|31)[ t](?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d)?$/i

JSFiddle

于 2013-01-23T09:59:52.510 に答える