2008-09-08 18 views

答えて

18

Regexではこれをしないでください。日付は、国によって異なっています。代わりにDateTime.TryParseルーチンを使用します。

DateTime parsedDate; 

if (DateTime.TryParse(dateString, out parsedDate) && parsedDate.Day <= 28) 
{ 
// logic goes here. 
} 

は、正規表現は、ほぼgolden hammer入力検証のですが、この例では、それは間違った選択です。

2

これは正規表現にはうってつけの作業ではないと思います。

私は、ライブラリ関数(DateTime.Parse for .NET)を使用して日付を解析し、その日のコンポーネントをチェックします。とにかくライブラリ機能の半分が複製されています。

1

なぜそれを日付データ型に変換してその日をチェックするのはなぜですか?正規表現を使用すると、それを実行することができますが、正規表現は過度に複雑になります。

1
([1-9]|1\d|2[0-8]) // matches 1 to 28 but woudn't allow leading zeros for single digits 
(0?[1-9]|1\d|2[0-8]) // matches 1 to 28 and would allow 01, 02,... 09 

(\ dは任意の数字と一致する場合は、あなたの正規表現エンジンがそれをサポートしていない場合は、[0-9]を使用します。)

はまた、私はのいずれかを使用することになり、質問What is the regex pattern for datetime (2008-09-01 12:35:45) ?

1

を参照してください。 DateTime.TryParse技法と併せてCustomValidator

関連する問題