2012-08-14 48 views
0

我的正常工作,使表单字段是有效的,如果为空或包含单词“你好”或通过其他验证以下...的JavaScript - 插入变量为正则表达式

var re = new RegExp(/^$|^[hello]|^([FG]?\d{5}|\d{5}[AB])$/); 

但我想让单词“你好”成为变量的值。

我都试过,但它似乎不再工作:

var i = "hello"; 
var re = new RegExp('/^$|^['+i+']|^([FG]?\d{5}|\d{5}[AB])$/'); 
+0

请注意,你不检查包含单词一个字符串“hello”而是开始以字母H,E, l或o。 – moopet 2012-08-14 14:34:14

+0

这可能不是你的问题,但是当你将正则表达式写成一个字符串时,例如'\\ d',你也需要避开'\'字符。 – apsillers 2012-08-14 14:35:22

+0

您的正则表达式也匹配“风信子”一词。 – DaoWen 2012-08-14 14:36:11

回答

4

有几件事情错在你的代码。

  • RegExp需要一个,而不是一个正则表达式的文字就像你在第一种情况下通过。看起来RegExp虽然足够聪明,并且检测到您正在传递正则表达式。所以,你的第一个例子的工作原理是巧合,是一样的:

    var re = /^$|^[hello]|^([FG]?\d{5}|\d{5}[AB])$/; 
    
  • /是表达一部分,他们表示正则表达式文字,很像引号(')分隔符表示一个字符串文字。因此,如果将该表达式作为字符串传递给RegExp,则不应包含/

  • 由于反斜杠也是字符串中的转义字符,所以为了创建表达式的文字反斜杠,您必须将其转义:\\

  • [hello]不测试用于字hello,它匹配任一helo,因而它相当于[ehlo]

说了这么多,你的代码应该是:

var i = "hello"; 
var re = new RegExp('^$|^'+i+'|^([FG]?\\d{5}|\\d{5}[AB])$'); 
1

下降前缘和后/人物和你的REG EXP不会你的期望。加起来\个字符,以便它们逃脱。另外[]意味着匹配任何这些字符。

基本例如

var str = "hello world"; 
var word = "hello" 
var re = new RegExp("^" + word + "\\s?") 
console.log(str.match(re)); 
+0

与[]的东西好位置。我完全错过了那个错误! – Tom 2012-08-14 14:41:21