正則表達式裏面我有一個正則表達式:結腸癌的JavaScript
/^([a-zA-Z0-9_ -.''""]+)$/
它工作得很好,允許字母,數字和一些特殊字符,如-
,.
,'
和"
。
不,我希望它也允許冒號(:
)。我嘗試了以下正則表達式,但它失敗 - 它開始允許許多其他特殊字符。
/^([a-zA-Z0-9_ :-.''""]+)$/
任何想法爲什麼?
正則表達式裏面我有一個正則表達式:結腸癌的JavaScript
/^([a-zA-Z0-9_ -.''""]+)$/
它工作得很好,允許字母,數字和一些特殊字符,如-
,.
,'
和"
。
不,我希望它也允許冒號(:
)。我嘗試了以下正則表達式,但它失敗 - 它開始允許許多其他特殊字符。
/^([a-zA-Z0-9_ :-.''""]+)$/
任何想法爲什麼?
-
在字符類中有特殊含義,就像在a-z
中一樣。試試這個:
/^([a-zA-Z0-9_ :\-.'"]+)$/
-.
(空間點)允許一些額外的字符,如#
,$
多。如果這是故意的,請嘗試:
/^([a-zA-Z0-9_ -.'":]+)$/
另外,請注意,您不必多次包含任何字符,這是毫無意義的。 '
和"
每次出現兩次,他們可以安全地刪除。
順便說一聲,冒號後出現點character table,表示正則表達式無效。它不應該允許多餘的字符,你應該得到一個錯誤。在Firefox中,您會得到:invalid range in character class
。
該表達式可能是錯誤的開始。你有/^([a-zA-Z0-9_ -.''""]+)$/
你可能的意思是/^([a-zA-Z0-9_ \-.''""]+)$/
(注意破折號前面的反斜槓)。 []
中的-
表示範圍,所以-.
(空格虛線點)的意思是「從空間到點」,如果將冒號放在那裏,它只會改變該範圍。
因此增加結腸和逃避破折號(和刪除冗餘'
和"
接近尾聲),你可能想:/^([a-zA-Z0-9_ \-.'":]+)$/
謝謝。你是對的。 – Rajesh 2011-03-08 20:31:47
您可以使用:
/^([a-zA-Z0-9_ :.'"-]+)$/
我搬到-
到字符類的末尾,以便字面處理而不是範圍運算符。您的原始正則表達式中也存在相同的問題,其中-
正在作爲範圍運算符處理。
另外我從char類中刪除了多餘的'
和"
。
謝謝。即使這個工作:) – Rajesh 2011-03-08 20:27:23
一個更可讀的替代方案可能是將'-'移到字符類的開始或結尾(這也會使其失去其特殊含義)。 – 2011-03-08 19:35:36
@cebewee - 好的,那取決於。無論如何,我喜歡逃避它,以確保它的含義是明確的,並防止錯誤。另一個開發者可能會將'[a-z _-]'改爲'[a-z_-〜]',然後我們遇到問題。 – Kobi 2011-03-08 19:39:05
+1,轉義總是比較安全。 – codaddict 2011-03-08 19:40:24