1

これらの日付形式を処理できる正規表現が必要です。

  • 2010年1月1日
  • 2010-6-01
  • 2010-06-1
  • 2010 年 10 月 10 日
  • 2010/10/10
  • 2010/10/10

これは可能ですか、それともフォーマットごとに複数の正規表現を作成した方がよいでしょうか?

4

3 に答える 3

4

パイプ (\|) を使用して正規表現を組み合わせることができるので、それぞれの正規表現を記述できる限り、それらをすべて一緒に貼り付けることができます。たとえば、これは最初の 2 つの日付と一致する必要があります: "\([12 ][0-9][0-9][0-9]-[1-9]-[1-9]\|[12][0-9][0-9][0-9]-[ 0-9]-0[1-9]\)" (形式を明確に指定していないため、実際の問題に合わせて一般化する必要があります。)

ただし、検討する必要があるかもしれないいくつかの大きな問題があります。

10-11-2010 とは正確にはどういう意味ですか? それは 10 月 11 日ですか、それとも 11 月 10 日ですか。

有効な日付のみを想定していますか? 2010 年 1 月 32 日に何をしますか? 2010 年 2 月 29 日はどうでしょうか。

于 2013-09-27T14:01:28.783 に答える
1

|次のように、さまざまな形式のバリデータを使用することをお勧めします。

/\b[\d]{4}-[\d]-[\d]\b
|
\b[\d]{4}-[\d]{1,2}-[\d]{1,2}\b
|
\b[\d]{2}-[\d]{2}-[\d]{4}\b
|
\b[\d]{2}\/[\d]{2}\/[\d]{4}\b
|
\b[\d]{4}\/[\d]{2}\/[\d]{2}\b/x

ただし、日付の検証とその発生の検出は同じ問題ではないことに注意してください。すべての日付は、標準の strtotimeに関して有効な日付であるため、その事実を使用して日付を検証 (検索ではなく) できます。

于 2013-09-27T13:58:20.550 に答える