7

MySQLタイムスタンプ形式の日付を保持する文字列に一致する正規表現を作成しようとしています(例:「2012-07-1602:04:33」)。

思ったほど簡単ではありません。たとえば、2月30日で終わるべきではありません。

これを行う簡単な方法があることは知っていますが、文字列とその文字列を評価するための正規表現を渡すことができるかどうかに依存しています。

何か提案をいただければ幸いです。

4

3 に答える 3

15

正規表現:

/^(((\d{4})(-)(0[13578]|10|12)(-)(0[1-9]|[12][0-9]|3[01]))|((\d{4})(-)(0[469]|1‌​1)(-)([0][1-9]|[12][0-9]|30))|((\d{4})(-)(02)(-)(0[1-9]|1[0-9]|2[0-8]))|(([02468]‌​[048]00)(-)(02)(-)(29))|(([13579][26]00)(-)(02)(-)(29))|(([0-9][0-9][0][48])(-)(0‌​2)(-)(29))|(([0-9][0-9][2468][048])(-)(02)(-)(29))|(([0-9][0-9][13579][26])(-)(02‌​)(-)(29)))(\s([0-1][0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9]))$/

仕事をします。入力ありがとうございます。

于 2012-08-19T09:55:18.340 に答える
10

非常に複雑な正規表現を使用するのではなく、2つのステップで実行する必要があります。

ステップ1:正規表現を使用してフォーマットが正しいかどうかを確認します。次のようなものを使用します

/^\d\d\d\d-(\d)?\d-(\d)?\d \d\d:\d\d:\d\d$/g

ステップ2:一致する場合は、strtotime()PHPと同様のものを使用し(または使用している言語の日時関数を使用して解析し)、結果が有効かどうかを確認して、2月30日のような日付を削除します。

于 2012-07-16T18:33:58.687 に答える
0

これは、2019-04-30または2019-04-3012:12:12のいずれかで機能するはずです

/^([1-2][0-9]{3})-([0-1][0-9])-([0-3][0-9])(?:( [0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/

また、0000-00-00を検証しないという利点もあります。

于 2019-04-30T12:13:53.443 に答える