2014-09-11 35 views
2

我想寫一個正則表達式來檢查以下特點:(){} []正則表達式 - 不能檢查特殊字符[]

下面的代碼需要用戶輸入什麼,控制檯根據是否輸入了無效字符來記錄消息。我遇到的問題是,我不能讓它同時檢查[]字符 - 以下檢查代碼[但]

var nameString = $("#name").val(); 
    var regexp = /[(){}[]/; 
    var invalidCharacters = nameString.match(regexp); 
     if(invalidCharacters){ 
       console.log('Contains invalid character'); 
       } else{ 
       console.log('DOES NOT contain an invalid character'); 
      } 

如何添加]並保持正則表達式是否有效?

回答

4
[[\]({})] 

你需要逃避他們中的一個,另一個支架範圍內不會出現[]

它不應成爲[[] ==>創建problem.use [[\]現在以其優良的

+0

+1。我希望你的回答被接受,說實話。我的只會造成混亂。 – 2014-09-11 10:39:43

+0

@AndrewCheong thanx.but你服務的目的too.Lets看如何OP採取它:) – vks 2014-09-11 10:42:26

+0

我明白這一點比較好,而@安德魯的看起來更時髦,都加:) – 2014-09-11 13:07:04

5

必須將在一開始],像這樣,

var regexp = /[](){}[]/; 

現在,可以理解,這看起來奇怪的。它看起來像一個空字符類,[],隨後是括號對(),{}[]。但是不管信不信,它實際上是的正則表達式中的標準,如果它是第一個存在的字符,那麼忽略]表示字符類的結束。因此,上面實際上是字符](){}[的字符類。

您還可以重新安排爲][(){},但正則表達式看起來依然撲朔迷離:

var regexp = /[][(){}]/; 

看,現在它看起來像2個字符類,一個空的,另一個爲人物(){} - 但再次,這就是它看起來像一樣,並且上面實際上也起作用 - 它是一組字符][(){}

事情是,大多數人不知道字符類的這方面,所以你最終只會混淆讀取你的代碼的其他人。我建議乾脆逃離],因爲@vks答案:

var regexp = /[(){}[\]]/; 

這將被所有人理解。

+2

+1爲沒有包括\ – 2014-09-11 10:35:54

+0

好的答案。 +1表示,儘管你可以在開始時將它置於非轉義狀態,但仍然可以繼續前進並逃避它。 – ridgerunner 2014-09-11 14:30:00