2

日付形式の正規表現はどうなりますか'01-Aug-12'.

私は asp.net アプリケーションでの日付形式を持っており、dd-M-yから検証したいと考えていasp.net regular expression validator controlます。

4

6 に答える 6

5

非常に基本的な形式チェックは次のようになります。

\d{2}-[A-Za-z]{3}-\d{2} 

ここで自分の目で確かめてください。

実際に検証するには、@ Brijesh Gandhi が提案したような日チェックが必要であり、次のような完全な月のリストを追加します。

([12]\d|0[1-9]|3[0-1])-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{2}

のような小文字の月を許可したい場合は、大文字と小文字augを区別しない修飾子を次の?i:ように追加できます...

([12]\d|0[1-9]|3[0-1])-(?i:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{2}

...しかし、たとえば、月も許可されますaUg-最初の文字のみを大文字または小文字にするのが最も正しいかもしれません。

([12]\d|0[1-9]|3[0-1])-([Jj]an|[Ff]eb|[Mn]ar|[Aa]pr|[Mm]ay|[Jj]un|[Jj]ul|[Aa]ug|[Ss]ep|[Oo]ct|[Nn]ov|[Dd]ec)-\d{2}

この最終バージョンの実際の動作はこちらでご覧ください

これでも、2012 年 2 月 30 日などの無効な日付は検出されないことに注意してください。これらの特別な日付を受け入れない正規表現は、非常に長く/醜いものになります。Javascript のDate.parse(...)/を使用してもnew Date(...)、上記の存在しない日付を喜んで受け入れ、3 月 1 日を返すため、それらを検出するのに役立ちません。したがって、100% 正しくするには、自分で複雑なコーディングを行うか、datejsなどのライブラリを使用する必要があります。

編集 1: @Brijesh Gandhi のデイ チェックを少し短縮し、Regexr リンクを更新しました。

編集2:正確さについてのコメント。

于 2012-08-24T11:19:50.033 に答える
4

なぜ正規表現?を使用して検証します

DateTime.TryParse(...)

とにかく、正規表現の基本的な形式は

[0-3][0-9]-[A-Z][a-z][a-z]-[0-9][0-9]

これは何もないよりはましかもしれません。

于 2012-08-24T11:16:41.533 に答える
3

正規表現は間違いなくここに行く方法ではありません。日付が有効でない場合Date.Parseに戻る単純な方法を実行できます。NaN

var myDate = '01-Aug-12​';
var isValidDate = !isNaN( Date.parse( myDate ));
于 2012-08-24T13:56:48.423 に答える
3

これはあまりエレガントではありませんが、正規表現を使用して日付を検証する場合は、次の場所にあります。

説明付きの正規表現

(
  (
    31-(Jan|Mar|May|Jul|Aug|Oct|Dec)|                                   # months with 31 days
    (0[1-9]|[12]\d|30)-(Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)|   # months with 30 or 31 days
    (0[1-9]|1\d|2[0-8])-Feb                                             # February up to 28th
  )
  -\d\d                                                                 # any two digits represent the year
)|
(
    29-Feb-([02468][048]|[13579][26])                                   # February 29th
)

00-Aug-00この正規表現は、のような無効な日付32-Aug-00を受け入れず29-Feb-01、うるう日 ( 29-Feb-04) を含む有効な日付を受け入れます。ではなく年を表すと仮定していることに注意してください。ということで、うるう日として受け付けました!002000190029-Feb-00

一行で:

実際に見てみましょう:

((31-(Jan|Mar|May|Jul|Aug|Oct|Dec)|(0[1-9]|[12]\d|30)-(Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)|(0[1-9]|1\d|2[0-8])-Feb)-\d\d)|(29-Feb-([02468][048]|[13579][26]))

大文字と小文字を区別しない

Javascriptで、 2i番目のパラメーターとして追加します。

var re = new RegExp(regexStr, "i");

ASP.NET では、RegexOptions.IgnoreCaseを使用します。

Regex re = new Regex(regexStr,RegexOptions.IgnoreCase);
于 2012-08-24T13:09:18.827 に答える
2

この正規表現を試してください

([1-2][0-9]|[0][1-9]|[3][0-1])-[a-zA-Z][A-Za-z][a-zA-Z]-[0-9][0-9]

00-aug-12この正規表現によると、有効な日付ではありません[0-3][0-9]-[A-Z][a-z][a-z]-[0-9][0-9]

于 2012-08-24T11:42:25.537 に答える
1

日付形式のすべての組み合わせの正規表現は次のdd-MMM-yyとおりです。

[0123][0-9]-[JFMASOND][aepuco][nbrylgptvc]-[0-9][0-9]

月の部分が厳密すぎることに注意してください。ただし、無効な日付を指定できる場合もあります。日付を解析して、それが有効かどうかを確認する方がよいかもしれません。

于 2012-08-24T11:24:36.427 に答える