用正则表达式替换Javascript字符串以剥离非法字符

需要一个功能来清除javascript中的一组非法字符:dirtyString.replace(/\|<>/g, ""):

这是用正则表达式解决的经典问题,这意味着我现在有2个问题。

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

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

我用反斜杠转义了正则表达式特殊字符,但是我很难理解发生了什么。

如果我单独尝试使用单个文字,那么大多数文字似乎都可以使用,但是一旦根据顺序将它们放到同一个正则表达式中,替换就坏了。

即这是行不通的-> dirtyString.replace(/\|<>/g, ""):

帮助赞赏!

JohnIdol asked 2019-11-06T00:13:09Z
4个解决方案
93 votes

您需要的是角色类。 这样,您只需要担心[]-字符(以及^,如果您将其放在字符类“ [”的开头之后就可以了)。

语法:[characters]其中character是带有字符的列表。

例:

var cleanString = dirtyString.replace(/[|&;$%@"<>()+,]/g, "");
Lekensteyn answered 2019-11-06T00:13:34Z
80 votes

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

我想允许哪些字符?

这是因为可能会有许多字符以某种方式进入字符串,从而使您不希望看到的东西破灭。

例如,这仅允许字母和数字删除无效字符组,并用连字符代替:

"This¢£«±Ÿ÷could&*()\/<>be!@#$%^bad".replace(/([^a-z0-9]+)/gi, '-');
//Result: "This-could-be-bad"
John Culviner answered 2019-11-06T00:14:18Z
7 votes

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

var cleanString = dirtyString.replace(/[\|&;\$%@"<>\(\)\+,]/g, "");
ChaosPandion answered 2019-11-06T00:14:43Z
6 votes

将它们放在支架[]中:

var cleanString = dirtyString.replace(/[\|&;\$%@"<>\(\)\+,]/g, "");
Darin Dimitrov answered 2019-11-06T00:15:08Z
translate from https://stackoverflow.com:/questions/3780696/javascript-string-replace-with-regex-to-strip-off-illegal-characters