我在做错了,因为下面的两个字符串在下面测试时都会返回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"));
答案 0 :(得分:7)
你需要加倍模式中的反斜杠。
var pattern = "^[\\s\\da-zA-ZåäöÅÄÖ_]+$"
问题在于,当你以这种方式构建正则表达式对象时,会在字符串上进行两次次传递:一次将其解释为字符串,然后第二次将其解释为常规表达。这两个微语法都使用\
来表示某些内容,因此通过将它们加倍,您可以从字符串常量解析中获得单个反斜杠。
如果你的模式确实是一个常量,而不是你从不同的部分动态构造的模式,那么你可以只使用正则表达式的本机语法:
var pattern = /^[\s\da-zA-ZåäöÅÄÖ_]+$/;
只需要一个反斜杠,因为该模式仅作为正则表达式解析一次。