4

我一直在使用这个:

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

它工作得很好,但与 JSLint 相冲突,因为这里这里insecure '^'的帖子中有概述。

共识是最好使用您regex指定允许的内容而不是不允许的内容。然而,没有人演示过如何做到这一点。我什至把弗拉纳根和克罗克福德摆在我面前,但令我感到羞耻的是,我仍然不知道该怎么做。

那么......你如何设置str2只允许使用正面测试而不是负面测试\w中发现的字符?str1

4

3 回答 3

2

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

\w选择单词,而选择\W单词。并且在表情上看起来更好一些。

这是一个RegEx 备忘单,它在您编码时会派上用场!

于 2012-06-30T04:54:13.383 回答
1

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

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

于 2012-06-30T04:51:48.600 回答
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, '');

于 2012-06-30T05:05:19.123 回答