2012-02-10 141 views
7

我對數字(0-9)和/或正斜槓(/)進行了正則表達式測試。它看起來像這樣:在jscript正則表達式字符類中轉義正斜槓?

/^[0-9/]+$/i.test(value) 

現在,我相信這是正確的,但日食的javascript驗證不同意:

語法錯誤令牌 「]」,刪除此令牌

我想這是因爲分隔符/分隔符是/,並且eclipse'認爲'正則表達式已完成(因此]將是意外的)。

我們可以通過逃避/像這樣滿足日食:

/^[0-9\/]+$/i.test(value) 

請注意,這兩個版本爲我工作。

我的這個問題是:

  • 據我知道我做的需要專門逃脫斜線在這個範圍內。這可能是具體情況(如在javascript中,它是使用的分隔符)。
  • 雖然他們似乎都在工作,我寧願使用「正確」的版本,因爲在不同的環境行爲,以及,以及..因爲正確和所有:)

有誰知道我應該這樣做? 是否逃脫?我沒有找到讓我逃避的範圍內/任何有信譽的網站,但Eclipse的驗證可能是太愚蠢了......

+0

是的,惱人的Notepad ++的語法突出顯示也會出錯。 – MikeM 2013-01-04 19:32:32

回答

8

標準明確說,你可以把任何東西轉義字符類除外\]和換行符:

RegularExpressionClassChar :: 
    RegularExpressionNonTerminator but not ] or \ 
    RegularExpressionBackslashSequence 

RegularExpressionNonTerminator :: 
    SourceCharacter but not LineTerminator 

http://es5.github.com/#x7.8.5)。無需轉義/。另一方面,如果有疑問,我個人會逃避一切,只是爲了讓更少的智能解析器開心。

+0

不錯:)。我對「Ecma標準」不是很瞭解,這是用於大多數.js解析器的標準嗎?你可以逃避一些不需要在不破壞東西的情況下逃脫的東西嗎? – Nanne 2012-02-10 11:29:32

+0

@Nanne:是的,大多數的JavaScript供應商都試圖跟上ecma標準。不是每個人都完全正確,但基本的東西應該在任何地方都一樣。是的,即使可以省略,額外的反斜槓也不會造成傷害。 – georg 2012-02-10 11:37:15

相關問題