2011-06-10 72 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中完美無瑕。順便說一句,沒有必要逃避字符組內的'.'。 – 2011-06-10 10:55:29

+0

@MayP:AFAIK它應該與JavaScript一起工作。我現在無法測試它。 – 2011-06-10 10:55:41

+0

@Felix:謝謝,我認爲'''是如此,但保留了'''''只是爲了安全起見:-) – 2011-06-10 10:56:14

0

這應該這樣做。

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

這將允許'0000:'或'0000:0',不是嗎? – 2011-06-10 10:44:53

4

你正在尋找這一個

^\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 

它仍然允許0000-9999.9999。您可以通過評估匹配成功後的字符串長度來檢查此特殊情況(即,必須是4,9或19)。

或者,你可以在(?=.{4}$|.{9}$|.{19}$)之前加上正則表達式。

+1

這不處理'0000-9999'。 – 2011-06-10 10:45:23

+0

糟糕。你說的對,我會解決的。 – Tomalak 2011-06-10 10:45:55

+0

@Martin Scharrer:閱讀操作的評論... – leppie 2011-06-10 10:46:46