2013-07-24 57 views
0

下面是我的正則表達式。正則表達式返回true,即使逗號不用雙引號括起來

/^\\"[a-zA-Z0-9!#\$%&\\'\*\+-\/=\?\^_`{\|}~;,:<>()@\[\]]*\\"$/ 

這是一個事實,即使在雙引號中不包含逗號,這是返回true正常工作分開。 爲什麼它顯示逗號的奇怪行爲。

例如a:b沒有引號返回false,而a,b沒有引號返回true。

專家可以請你幫

+0

你正在執行哪個文本正則表達式?你能否提供一個小例子,以便我可以爲你測試?正則表達式應該做什麼? – Sheridan

+0

你想匹配什麼?只是拋出一個像這樣的長長的正則表達式,而沒有提及你希望它匹配(或測試)的東西將會使人們很難幫助你。 –

+0

嗯,我正在檢查文本和字符是否用雙引號(轉義)括起來。如果字符沒有用引號括起來,那麼它應該返回false.So以不包含在引號中的示例firstname:lastname或返回false所期望的效果。然而,名字,姓氏返回是不正確的。理想的「名字,姓氏」應該是真的 –

回答

3

因爲你在這裏創建一個字符範圍:

/^\\"[a-zA-Z0-9!#\$%&\\'\*\+-\/=\?\^_`{\|}~;,:<>()@\[\]]*\\"$/ 
          ^^^^^ 

這意味着從+/所有字符,這也包括,

在一個字符類中,你不需要轉義正常的正則表達式特殊字符,但是還有另外一個字符,它會得到一個特殊的含義-

所以正確的字符類將是

/^\\"[a-zA-Z0-9!#$%&\\'*+\-\/=?^_`{\|}~;,:<>()@\[\]]*\\"$/ 

另一種方法是把-在開始或字符類的結尾,在這情況下,它不會創建一個範圍,並且不需要逃跑。

+0

非常感謝您的幫助Stema。然而,這個新的字符類沒有解決問題 –

+0

在javascript中它取決於你如何創建正則表達式,也許你需要雙重轉義,意味着'\\ - ' – stema

+0

嘿Stema道歉爲我以前的評論。修改後的reg-ex提供你做了工作。我早先錯誤地實施了它......再次感謝很多:) –