我一直在使用这个:
str2 = str1.replace(/[^\w]/gi, '');
它工作得很好,但与 JSLint 相冲突,因为这里和这里insecure '^'
的帖子中有概述。
共识是最好使用您regex
指定允许的内容而不是不允许的内容。然而,没有人演示过如何做到这一点。我什至把弗拉纳根和克罗克福德摆在我面前,但令我感到羞耻的是,我仍然不知道该怎么做。
那么......你如何设置str2
只允许使用正面测试而不是负面测试\w
中发现的字符?str1
您的示例太简单了,无法证明不在^
正则表达式中使用的意义。
一个更好的例子可以是:在表单提交中清理 HTML 代码,您希望允许 HTML 标记,但不希望人们注入 XSS(跨站点脚本)攻击。在这种情况下,如果您使用黑名单方法,则无法可靠地删除所有攻击代码,因为攻击者可以更改语法以避免您的过滤器 - 或调整代码以便过滤后的代码将返回攻击代码。正确的方法是使用白名单并列出所有允许的标签,以及允许的属性。这个例子可能与正则表达式无关——因为不应该使用正则表达式来解析 HTML,但它展示了过滤中白名单与黑名单方法的要点。
这取决于你想做什么。
\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, '');