javascript - 为什么这个 Javascript RegExp 测试不起作用?

标签 javascript regex security

我正在思考为什么这不起作用:

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/

相关文章:

javascript - 实时跟踪期间 highcharts 和 highstock 之间的差异以及具有最大值的 xAxis

javascript - 在不滚动的情况下 react 填充剩余高度

PHP 正则表达式 - 检测未闭合的括号

Java EE 角色管理系统 - 它们存在吗?

php - 我如何才能 100% 确定 HTML 标签内的 JS?

javascript - 在 Angular 4 中实现 d3.js

Javascript随机背景图像大小

Javascript 正则表达式只允许最多 10 位数字,不允许字符串和特殊字符

regex - "you can’ t 在 "Programming Perl"中隐藏正则表达式构造中模式的终止分隔符是什么意思?

signing - 为什么我们不应该在非对称密码系统中用私钥加密?