2014-09-11 37 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