2012-08-29 69 views
2

我在做什么错误,因为下面的两个字符串在下面测试时都返回false为什么不能让我的正则表达式工作?

var pattern = "^[\s\da-zA-ZåäöÅÄÖ_]+$" 
    var reg = new RegExp(pattern); 

    console.log(reg.test("This should be invalid as it is full with invalid chars. #!¤%&/()=?")); 
    console.log(reg.test("This is an valid string, despite that Swedish chars such as ÅÄÖ are used")); 

回答

7

您需要在模式中的反斜杠上双击。

var pattern = "^[\\s\\da-zA-ZåäöÅÄÖ_]+$" 

的问题是,当你建立正则表达式对象这样一来,有2个在字符串做遍:一个把它解释为一个字符串,然后进行第二次将其解释为正则表达式。这两种微语法都使用\来表示一些东西,所以通过将它们加倍,可以从字符串常量解析中获得单个反斜杠。

如果你的模式是真的,你从单独的部分动态地构造一个恒定的,而不是什么东西,那么你可以使用原生语法的正则表达式:

var pattern = /^[\s\da-zA-ZåäöÅÄÖ_]+$/; 

只有一个反斜杠是必要的,因为模式仅作为正则表达式解析一次。

+0

嗨波蒂。从来不知道有两个通行证。但是,如上图所示,我仍然从'reg.test'返回'false',使用您的模式 – Industrial

+0

@Industrial第二个测试字符串中有一个逗号。 – Pointy

+0

该死!我需要新的眼镜。非常感谢,波蒂 – Industrial

相关问题