2011-06-10 3 views

答えて

1

$のように行の末尾に^のようにマークすると、/^(\d{4}$\.\d{4}$)|(\d{4}$)|(\d{4}$\:\d{4}$)/が間違っています。

私がしようとするだろう:

/^(\d{4}\.\d{4})|(\d{4})|(\d{4}\:\d{4})$/ 

代わりに。

また、第二部はオプションで作成し、それが存在する場合.:を可能にすることができます

/^\d{4}([\.:]\d{4})?$/ 

(私はより多くのPerlの正規表現の男だが、それは同様にJavaScriptが動作するはずです)

+1

@MayP:提供されている表現はJavaScriptで完全に問題ありません。 Btwの場合、文字グループ内の '.'をエスケープする必要はありません。 –

+0

@MayP:AFAIK JavaScriptでも動作するはずです。私はちょうど今それをテストすることはできません。 –

+0

@Felix:感謝、私は '.'については考えていましたが、' '\' 'を安全な面に置いていました.- –

0

これはそれを行う必要があります。

/[0-9]{4}((\.|-|:)?[0-9]{0|4})?/ 
+0

これは '0000:'や '0000:0'でも許されますね。 –

4

あなたはこれがまだ0000-9999.9999ことができます。この1

^\d{4}(?:([.:])\d{4})?(?:-\d{4}(?:\1\d{4})?)?$ 

説明

 
^    # start-of-string 
\d{4}   # four digits 
(?:    # non-capturing group 
    ([.:])  # delimiter char (store in group 1) 
    \d{4}   # four digits 
)?    # end group, make optional 
(?:    # non-capturing group 
    -    # a dash 
    \d{4}   # four digits 
    (?:\1\d{4})? # whatever group 1 was plus four digits (optional) 
)?    # end group, make optional 
$    # end-of-string 

を探しています。一致が成功した後に文字列の長さを評価することで、この特殊なケースを確認できます(4,9,19でなければなりません)。

また、正規表現の先頭に(?=.{4}$|.{9}$|.{19}$)を付けることもできます。

+1

これは '0000-9999'を処理しません。 –

+0

あなたの権利、私はそれを修正します。 – Tomalak

+0

@Martin Scharrer:OPのコメントを読んでください... – leppie