用正则表达式替换Javascript字符串以去除非法字符

时间:2010-09-23 16:52:25

标签: javascript regex string

需要一个功能来解除javascript中的一组非法字符:|&;$%@"<>()+,

这是使用正则表达式解决的经典问题,现在意味着I have 2 problems

这是我到目前为止所得到的:

var cleanString = dirtyString.replace(/\|&;\$%@"<>\(\)\+,/g, "");

我正在使用反斜杠逃避正则表达式特殊字符,但我很难理解正在发生的事情。

如果我单独尝试使用单个文字它们中的大部分似乎都有效,但是一旦我将它们放在同一个正则表达式中,取决于顺序,替换就会被破坏。

即。这不起作用 - &gt; dirtyString.replace(/\|<>/g, ""):

帮助表示赞赏!

4 个答案:

答案 0 :(得分:81)

您需要的是character classes。在这种情况下,您只需要担心]\-个字符(以及^,如果您在字符类开头后将其放置好“[”)。

语法:[ 字符 ]其中字符是包含字符的列表。

示例:

var cleanString = dirtyString.replace(/[|&;$%@"<>()+,]/g, "");

答案 1 :(得分:73)

我倾向于从反向角度看待它,这可能是你想要的:

我想要允许哪些字符?

这是因为可能有lots of characters以某种方式进入一个字符串,这是你想不到的。

例如,这个只允许使用字母和数字删除无效字符组,将其替换为hypen:

"This¢£«±Ÿ÷could&*()\/<>be!@#$%^bad".replace(/([^a-z0-9]+)/gi, '-');
//Result: "This-could-be-bad"

答案 2 :(得分:5)

您需要将它们全部包装在角色类中。当前版本意味着用空字符串替换此字符序列。当用方括号括起来时,意味着用空字符串替换任何这些字符。

var cleanString = dirtyString.replace(/[\|&;\$%@"<>\(\)\+,]/g, "");

答案 3 :(得分:5)

将它们放在括号[]中:

var cleanString = dirtyString.replace(/[\|&;\$%@"<>\(\)\+,]/g, "");