2011-07-18 13 views
0

私は、正規表現で非常に新しいだと私は正規表現here次使用して日付を検証しようとしている:正規表現日付の検証エラー

^[1-31]\.[1-12]\.[1999-2005]$ 

が、私は「無効reguar表現」として出力を取得しています

私は何が間違っているのか教えてください私は上記の正規表現でやっていますか?

答えて

4

[1-31]のように、正規表現で数値の範囲を一致させることはできません。文字の範囲にしか一致しません。 [1-31]([12]?[0-9]|3[01])と一致させる必要があります。これは世界で最も親切なことではありません。

2

あなたは使用することができます。

[0-9]{2}.[0-9]{2}.[0-9]{4} 

または

^(0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).(19|20)[0-9]{2}$ 

両方のあなたの日付と一致するが、文句を言わないことを検証します。 正規表現は、30と31の間、また28とうるう年の間をチェックしなければならないという事実のために、日付を検証する良い方法だとは思っていません。

おそらく、うるう年を含むすべての組み合わせを処理する正規表現があります。しかし、あなたの環境の既存の機能を使用することをお勧めします。

たとえば、PHPの場合は、checkdate()、またはRubyを使用する場合は日付クラスを使用します。

+0

+1を働いていた、それを行いますしかし、あなたはそれを適切なフォーマットに変換しなければなりませんか? – phimuemue

+0

checkdate - グレゴリオ暦の日付を確認する|| bool checkdate(int $ month、int $ day、int $ year)||与えられた日付が有効であればTRUEを返します。それ以外の場合はFALSEを返します。 – Talisin

1

これを試してみてください。

^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}$ 

それは以下の文字列を一致させることができます〜

12.12.1999 
12-12-1999 
12 12 1999 
12/12/1999 
0

私はそれが...完全に、checkdate` `ため

for(var i=0; i<100;i++){ 
    if(/^([1-9]|[1-2][0-9]|[3][0-1])$/.test(i)) { 
     console.log(i); 
    } 
} 
// display only the range of 1 to 31 and disregards the 32-100 
+0

私は実際の日付だけを検証すると思う。あなたがその質問を見ると、彼は '25.3.2004'のようなものを検証したいようです。また、ループは意味をなさない。 – amoebe

+0

ループはデモンストレーションのためのテストです::) – agutoli

+0

ああ、申し訳ありません(: – amoebe