OK、あなたは正規表現を求めました。ここにあります。少なくとも可能なこの獣を理解させるには、バージョンをコメントし、
まず、冗長:
^ # start of string
(?: # either match...
(?:
(?: # 31st day of all allowed months
(?:(?:0?[13578]|1[02])/31)
| # or
(?:(?:0?[13-9]|1[0-2])/(?:29|30))
) # 29th/30th day of any month except February
/ # plus any year since 1600
(?:1[6-9]|[2-9]\d)
\d{2}
)
| # or
(?: # match Feb 29th
0?2/29/
(?: # in all leap years since 1600
(?:
(?: # century
1[6-9]|[2-9]\d
)
(?: # two-digit years divisible by four, not ending in 00
0[48]
|
[2468][048]
|
[13579][26]
)
|
(?: # all the leap years ending in 00
(?:16|[2468][048]|[3579][26])
00
)
)
)
)
| # or
(?: # (for any month)
(?:0?[1-9])
|
(?:1[0-2])
)
/
(?: # match the 1st-28th day
0?[1-9]|1\d|2[0-8]
)
/
(?:
(?:1[6-9]|[2-9]\d)\d{2}
)
)$
あるいは、もし私はそれが正規表現で日付を検証するためには良い考えではありませんなぜそれがすぐに明らかだと思います
^(?:^(?:(?:(?:(?:(?:0?[13578]|1[02])/31)|(?:(?:0?[13-9]|1[0-2])/(?:29|30)))/(?:1[6-9]|[2-9]\d)\d{2})|(?:0?2/29/(?:(?:(?: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])/(?:(?:1[6-9]|[2-9]\d)\d{2}))$)$
これらは許すが一桁の月/日で先行ゼロを必要としません:あなたは、ASP.NETのバリデータに冗長な正規表現を使用することはできません。それが望ましくない場合は、0?
のすべてのインスタンスを0
に置き換えてください。
mmddyyまたはmm/dd/yyまたはmm/dd/yyyyですか?その他の要件は? 01/01/1792は有効ですか? 99年9月9日か99年9月9日はどうですか?もしそれがmmddyyなら、1900年代と2000年代の間のカットオフはどこですか? –
@Tim:そのmm/dd/yyyy。妥当性のために、私はまだ具体的な要件はないと思います。カットオフなし。 – Malik