我一直在用这个:
str2 = str1.replace(/[^\w]/gi, '');
它工作正常,但JSLint因here和here帖子中列出的insecure '^'
而违反。
大家一致认为最好使用regex
来指定 允许的内容而不是允许的内容。然而,没有人会演示如何做到这一点。我甚至在我面前有弗拉纳根和克罗克福德,但令我感到羞耻,我仍然不确定该怎么做。
那么......你如何设置str2
只允许\w
中使用正面测试而非负面测试中找到str1
个字符?
答案 0 :(得分:2)
答案 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, '');