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"));
4

1 回答 1

7

您需要在模式中的反斜杠上加倍。

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

问题在于,当您以这种方式构建正则表达式对象时,会对字符串进行两次传递:一次将其解释为字符串,然后将其解释为正则表达式。这两种微语法都\用来表示某些东西,因此通过将它们加倍,您可以从字符串常量解析中得到一个反斜杠。

如果您的模式确实是一个常量,而不是您从单独的部分动态构造的东西,那么您可以只使用正则表达式的本机语法:

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

只需要一个反斜杠,因为模式只解析一次,作为正则表达式。

于 2012-08-29T15:40:16.893 回答