Javascript Regex指定允许的内容(而不是不允许的内容)

时间:2012-06-30 04:46:25

标签: javascript regex jslint

我一直在用这个:

str2 = str1.replace(/[^\w]/gi, '');

它工作正常,但JSLint因herehere帖子中列出的insecure '^'而违反。

大家一致认为最好使用regex来指定 允许的内容而不是允许的内容。然而,没有人会演示如何做到这一点。我甚至在我面前有弗拉纳根和克罗克福德,但令我感到羞耻,我仍然不确定该怎么做。

那么......你如何设置str2只允许\w中使用正面测试而非负面测试中找到str1个字符?

3 个答案:

答案 0 :(得分:2)

尝试使用\W(大写字母W)。

\w选择字,而\W选择字。并且在表达中看起来更好一些。

这是一个RegEx cheatsheet,在您编码时会很方便!

答案 1 :(得分:1)

您的示例太简单了,无法证明在正则表达式中不使用^

更好的示例可以是:HTML表单在表单提交中清理,您希望允许HTML标记,但不希望人们注入XSS(跨站点脚本)攻击。在这种情况下,如果使用黑名单方法,则无法可靠地删除所有攻击代码,因为攻击者可以更改语法以避免使用过滤器 - 或者调整代码以便过滤后的代码将返回攻击代码。正确的方法是使用白名单并列出允许的所有标记,以及允许的属性。此示例可能与正则表达式无关 - 因为正则表达式不应该用于解析HTML,但它在过滤时证明了关于白名单与黑名单方法的观点。

答案 2 :(得分:0)

这取决于你想做什么。

您可以只允许\w字符集,并在字符串包含\ w字符集中的字符以外的字符时抛出错误,通过执行以下操作:

str1='blah blah string';
if(str1.match(/^\w*$/gi)
{
    //do something
}
else
{
    //alert and/or throw error
}

或者您可以接受任何被定义为str1的内容并过滤掉您不想要的字符。这是你目前正在做的。例如:

str1='blah blah some string';
str1=str1.replace(/\W/gi,'');

注意:以上是您正在做的更短版本。 str2 = str1.replace(/[^\w]/gi, '');