2012-02-22 8 views
0

私はしばらくの間、正規表現を見てきましたが、常に正規表現を思い付く限り、問題があるようです。日付Regexは強い日付正規表現を得ることができません

発現は

^(0?[1-9]|[12][0-9]|3[01]) 

の下に日付の正規表現がDDMMM形式のどのようなものか上の任意の助けを借りているのですか?

+1

「ddMMM」→「22Feb」? –

答えて

0

私はどこかから以下の例を読みました。

日付をmm/dd/yy形式で一致させたいとしますが、ユーザーに日付区切り文字を選択させたいとします。 クイックソリューションは\d\d.\d\d.\d\dです。最初は上手く見えます。

\d\d[- /.]\d\d[- /.]\d\dが優れたソリューションです。この正規表現では、日付区切り文字としてダッシュ、スペース、ドット、スラッシュを使用できます。

この正規表現はまだ完璧ではありません。有効な日付として99/99/99と一致します。

[0-1]\d[- /.][0-3]\d[- /.]\d\dは一歩前ですが、それでも19/39/99に一致します。私はこの思い付いた

[0-1][1-9][- /. ]?(0[1-9]|[12][0-9]|3[01])[- /.]?(18|19|20|21)\d\d$ 
0

それでも

より良い1、うるう年を除いて、それは長いのですが、それは状況のほとんどをカバー:

^((0?[1-9]|[12][0-8])[/.-](0[1-9]|1[0-2]))|((29|30)[/.-](0[13-9]|1[0-2]))|(31[/.-](0[13578]|1[02]))$

  • すべて月は28日あります(あなたのコードの中に何らかの関数を入れてうるう年をチェックする必要があります)。

    (0?[1-9]|[12][0-8])#日:01

    (0[1-9]|1[0-2])#ヶ月#セパレータ

    [/.-]

    28:2月1日を除く毎月

  • 12、29、30日あり:

    (29|30) #日数:29または30

    [/.-] #separator

    (0[13-9]|1[0-2])#か月間(1月、月、月、7月、8月、10月と12月)

    31#:1、および3

  • 12に一部だけヶ月は31日を持っています日:31

    [/.-]#セパレータ

    (0[13578]|1[02])#1ヶ月:01、03、05、07、08、10、12

関連する問題