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

Joh*_*dol 56 javascript regex string

需要一个函数去除javascript中的一组非法字符: |&;$%@"<>()+,

这是一个需要用正则表达式解决的经典问题,这意味着现在我有两个问题.

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

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

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

如果我单独尝试使用单个文字,它们中的大多数似乎都可以工作,但是一旦我将它们放在同一个正则表达式中,取决于顺序,替换就会被破坏.

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

帮助赞赏!

Lek*_*eyn 93

你需要的是角色类.在这方面,你只有一直担心],\-字符(^如果你的字符类"开始后直接将其置于[").

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

例:

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

  • 不,只有```和`\`(以及`^`除非你把它放在第一个位置以外的地方,而`-`除非你把它放在第一个或最后一个). (5认同)

Joh*_*ner 80

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

我想要允许哪些字符?

这是因为可能会有许多字符以某种方式形成字符串,这是你不会想到的.

例如,这个只允许字母和数字删除无效字符组替换它们用hypen:

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


Cha*_*ion 7

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

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


Dar*_*rov 6

把它们放在括号中[]:

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