2009-08-22 15 views

答えて

5

これにはregexを使わないことを強くお勧めします。代わりに、独自のバリデータ(BaseValidatorを継承)を作成し、DateTime.TryParseExactを使用して値をDateTimeに変換できることを確認する必要があります。

+0

が、私はクライアント側でこれを検証したい、私は は、サーバ側に行くべきではないと私はボタンのクライアントのクリックを使用している場合validate.Andもう一つは、他のすべての必要なバリデータです動作していません。 –

1

クライアント側(JavaScriptの)検証のために、あなたはあなたのスペックに対して、構文(数字、スペース、セパレータ)をチェックします

^\d\d/\d\d/\d\d \d\d:\d\d:\d\d [AP]M$ 

厳密を使用することができます。一致が得られた場合は、返された一致のサブグループに入力された値の範囲(例:1 < =月< = 12など)を確認する必要があります。

this siteを使用して正規表現をテストします。

-2

あなたはこれを試すことができます

(0[1-9]|1[012])/(0[1-9]|[12][0-9]|3[01])/\d\d (0[0-9]|1[0-9]|2[0-4]):([0-5][0-9]):([0-5][0-9]) [AM|PM] 

は、それはあなたの問題を解決を願っています。

-1
 (0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d 

フォーマットは

2

旧質問MM-DD-YYYYですが、頻繁に尋ねました。

うるう年を含むすべての日付を一致させる正規表現。 MM-DD-YYYY形式の場合DD-MM-YYYY形式

^(?:31#(?:(?:0[13578])|(?:1[02]))#)|(?:(?:29|30)#(?:(?:0[1,3-9])|(?:1[0-2]))#)(?:(?:1[6-9]|[2-9]\d)\d{2})$|^(?:29#02#(?:(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0[1-9])|(?:1\d)|(?:2[0-8]))#(?:(?:0[1-9])|(?:1[0-2]))#(?:(?:1[6-9]|[2-9]\d)\d{2})$ 

については

^(?:(?:(?:0?[13578]|1[02])#31)\1|(?:(?:0?[1,3-9]|1[0-2])#(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2#29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))#(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$ 

ご希望の日付の区切りとREGの元に#を変更してください。グローバルセパレータの場合は、#を(/ | - |)に置き換えてください。

RegExは、次の日付に対してテストされ、正常に実行されています。パフォーマンスもリストされています。

29-02-2000 ---> true 
millis 2 
29-02-2006 ---> false 
millis 0 
29-02-2001 ---> false 
millis 0 
30-02-2000 ---> false 
millis 0 
31-11-2000 ---> false 
millis 0 
29-13-2000 ---> false 
millis 0 
31-11-2000 ---> false 
millis 0 
31-07-2000 ---> true 
millis 0 
31-08-2000 ---> true 
millis 1 
31-12-2000 ---> true 
millis 0 
30-11-2011 ---> true 
millis 0 
17-07-2011 ---> true 
millis 0 
04-10-1987 ---> true 
millis 0 
01-01-1900 ---> true 
millis 0 
24-05-88 ---> false 
millis 0 
24-05-88 ---> false 
millis 0 
29-12-2011 ---> true 
millis 0 
31-12-2000 ---> true 
millis 0 
1-1-2010 ---> false 
millis 0 
1-1-99 ---> false 
millis 0 
1-01-99 ---> false 
millis 0 
01-1-99 ---> false 
millis 0 
2

これは、このいずれかをチェックし、私のため

^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$ 

Source of regex

+1

これは私のためにもうまくいきましたが、投稿してから4年後には大きな助けになりました。 –

-1

を働きました。また、うるう年を検証します。

^(((0[13578]|1[02])[\/\.-](0[1-9]|[12]\d|3[01])[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((0[13456789]|1[012])[\/\.-](0[1-9]|[12]\d|30)[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((02)[\/\.-](0[1-9]|1\d|2[0-8])[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm))|((02)[\/\.-](29)[\/\.-]((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))\s(0[0-9]|1[0-2]):(0[0-9]|[1-59]\d):(0[0-9]|[1-59]\d)\s(AM|am|PM|pm)))$ 

06/12/2014 12:45:56 AM // true 
11-12-1965 06:04:34 PM // true 
11/31/2015 11:40:00 AM // false 
12-31-1945 01:38:09 PM // true 
02/29/2012 09:04:10 AM // true [leap year] 
02/29/2013 09:04:10 AM // false 
06.12.2014 13:04:10 AM // false 

Demo

+0

@downvoter説明をする – hex494D49

関連する問題