2016-11-21 20 views
1

我試圖創建一個html輸入標籤,它只接受以2種格式之一輸入的數字,並拒絕所有其他輸入。爲什麼我得到:「無效的正則表達式。未捕獲的SyntaxError。無效的轉義。」?

我想只有這些格式接受的數字,包括要求破折號:

1234-12 

1234-12-12 

注:這不是日期,而是法律的章節編號

我正在閱讀的有關正則表達式的一切都表示,以下內容應該可行,但事實並非如此。

<input class="form-control" 
         type="text" 
         pattern="^(\d{4}\-\d{2}\-\d{2})|(\d{4}\-\d{2})$" 
         required /> 

Devtools控制檯錯誤在Chrome:

Pattern attribute value ^(\d{4}\-\d{2}\-\d{2})|(\d{4}\-\d{2})$ is not a valid regular expression: Uncaught SyntaxError: Invalid regular expression: /^(\d{4}-\d{2}-\d{2})|(\d{4}-\d{2})$/: Invalid escape

+4

用'-'替換'\ -'。 –

+2

因爲你的正則表達式中有一個無效的轉義,你會得到「無效轉義」。在字符類('[]')之外,'-'沒有特殊含義。所以'\ -'是無效的轉義。 –

+1

@ T.J.Crowder:我認爲這裏令人困惑的部分是'/ \ - /'是JS中的合法正則表達式,而'/ \ -/u'則不是。通常(即幾乎無處不在)的身份轉義並不是一個錯誤,而是允許的,即使嚴格沒有必要。 – Joey

回答

3

你不應該逃避連字符u標誌(在默認情況下使用的pattern正則表達式的一個使用ES6正則表達式字符類之外Chrome和FF的當前版本)。

而且,在圖案屬性的正則表達式被默認錨定,通過使用可選組中刪除redudant ^$和縮短圖案

pattern="\d{4}-\d{2}(-\d{2})?" 

此正則表達式中的HTML5 pattern屬性是指:

  • \d{4}-\d{2} - 匹配4個位數,-,然後從2字符串的開頭數字
  • (-\d{2})? - 並且可以選擇匹配-,然後匹配字符串末尾的2位數字。
+0

我加了一個說明:在字符類裏面,連字符可以用'u'修飾符在ES6正則表達式中轉義,因爲在字符類中''-'可能有特殊含義。 –

+1

謝謝!這是美麗的工作! – Jason

+1

哦,是的,絕對的,我之前沒有意識到這一點。再次感謝你! – Jason

相關問題