我正在思考为什么这不起作用:
function hasOnlyWhitelistedCharacters(string)
{
var whitelist = RegExp("\\w");
console.log(whitelist.test(string));
return whitelist.test(string);
}
当我运行这个字符串时:"wwww??????**<><>"
进入这个函数,它返回true。它不应该返回 false 吗?事实上,似乎无论我做什么,它都会返回 true。
这些也不起作用:
var whitelist = RegExp(\w);
var whitelist = /\w/;
最佳答案
/\w/
匹配字符串中任意位置的单个标识符字符 ([0-9a-zA-Z_])。要针对整个字符串进行测试,请使用 anchors (“^”和“$”)和repetition (“+”或“*”,取决于您是否要允许空字符串)。尝试 /^\w*$/
或 /^\w+$/
, 或者用 /\W/
测试你不想要的字符串.
function hasOnlyWhitelistedCharacters(string)
{
var whitelist = /^\w*$/;
console.log(whitelist.test(string));
return whitelist.test(string);
}
function hasNoBlacklistedCharacters(string)
{
var blacklist = /\W/;
console.log(blacklist.test(string));
return ! blacklist.test(string);
}
对于更复杂的列入黑名单的字符类,您可以使用 complemented class :
function hasOnlyWhitelistedCharacters(string)
{
// match all characters, which must be in the set
var whitelist = /^[\w\s\u00C0-\uDFFF\uF900-\uFFFF]*$/;
console.log(whitelist.test(string));
return whitelist.test(string);
}
function hasNoBlacklistedCharacters(string)
{
// match one character not in the set
var blacklist = /[^\w\s\u00C0-\uDFFF\uF900-\uFFFF]/;
console.log(blacklist.test(string));
return ! blacklist.test(string);
}
使用正则表达式时要注意字符编码。实际上,在任何上下文中都要注意字符编码。关于编码的假设可能会导致安全漏洞。
关于javascript - 为什么这个 Javascript RegExp 测试不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5074685/