2012-03-07 12 views
0

これは繰り返しの質問です。私はそれが他の場所に記載されているのを見ませんでした。6つの連続した数字の文字列でDOBを見つけるための正規表現

私はmmddyyの形式で生年月日を認識する正規表現文字列を探しています。私が知る限り、正規表現は、個々の数字セットがどこにあるのかを知りません。

正規表現でこれを見つける簡単な方法はありますか(デリミタ/スペーシングは不要です)? (\d\d)(\d\d)(\d\d)

あなたも、正規表現のO/Wこの問題を解決することができます:

+0

だから、それは常に6桁の数字になりますか? –

答えて

2

どのようなものについて:

^([0-9]{2})([0-9]{2})([0-9]{2})$ 

最初のグループは、次のグループが一日のための2つになり、そして最後のグループは、今年になり、月は2桁になります。

あなたが賢くなりたいと思った場合、あなたは最初のグループは、0または1で始まり、その日はおそらく、0、1、2または3で始まる必要がありますことを確認できます。

^([0-1][0-9])([0-3][\d])([\d]{2})$ 

また、したくない場合は、RegExを使用する必要はありません。最近のほとんどの現代のフレームワーク(Python、.NET、Javaなど)には、指定されたフォーマットで日付を解析するライブラリとメソッドがあります。これには、型チェックとネイティブDateオブジェクトを構築する機能が追加されます。

UPDATE:

あなたは31の上に行かない日を確認するためにORを使用することができます。

^([0-1][0-9])([0-2][\d]|[3][0-1])([\d]{2})$ 
+0

ありがとうマイク、素晴らしいアイデア。クイック質問 - それはまだ "133999"のようなものをキャッチしないだろうか? 「12」以下の日数と「31日」以下の日数をキャッチする方法はありますか? –

+1

さて、私は私の答えを更新しました。私はあなたに月の事を考えさせる(同じアイデア)。 –

+1

Coolio。 [([0] [1-9] | [1] [0-2])([0] [1-9] | [1-2] [\ d] | [0-1] )([\ d] {2}) 'が動作します。どうもありがとうございました。 –

0

日と月は常に(ゼロ前の)2桁を使用している場合は、その問題はもちろんありませんこと。

もしそうでなければ、彼らは銀色の弾丸ではありません。

関連する問題