使用 JavaScript 从字符串中删除除空格以外的所有特殊字符

IT技术 javascript special-characters
2021-02-09 12:50:02

我想使用 JavaScript 从字符串中删除除空格以外的所有特殊字符。

例如, abc's test#s 应该输出为 abcs tests.

6个回答

您应该使用带有单个正则表达式的字符串替换函数。假设通过特殊字符,您的意思是任何不是字母的东西,这是一个解决方案:

const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));

要在非拉丁字母使用此解决方案,请查看这个答案
2021-03-18 12:50:02
实际上你需要这个str.replace(/[^a-zA-Z0-9 ]/g, "");通知,0-9和]之间有一个空格
2021-03-27 12:50:02
这也将删除数字字符!
2021-03-30 12:50:02
@tech_geek 你可以做到 str.replace(/[^a-zA-Z0-9]/g, "")
2021-04-02 12:50:02
它需要一些调整,它没有删除 / 或 - 字符,camelCase 的第一个字符应该是小写的,但这个是大写的。
2021-04-11 12:50:02

您可以指定要删除的字符:

string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');

或者,要更改除数字和字母以外的所有字符,请尝试:

string = string.replace(/[^a-zA-Z0-9]/g, '');
如果需要空间,这是有效的答案。
2021-03-13 12:50:02
@ArbazAbid 保留空间只需将其添加到白名单字符中。您的正则表达式将是“/[^a-zA-Z0-9 ]/g”(注意 9 后的空格)
2021-03-30 12:50:02
那个正则表达式代表什么?除了字母数字字符之外还有什么?正则表达式中的否定符号是什么?
2021-04-04 12:50:02
如果我不想使用这个删除空间怎么办? /[^a-zA-Z0-9]/g
2021-04-07 12:50:02
这将替换()whitespaces在字符串中.text().replace(/[ ()]/g, '')
2021-04-12 12:50:02

第一个解决方案不适用于任何 UTF-8 字母表。(它将剪切诸如 Привіт 之类的文本)。我设法创建了一个不使用 RegExp 并在 JavaScript 引擎中使用良好的 UTF-8 支持的函数。这个想法很简单,如果一个符号的大小写相等,那么它就是一个特殊字符。唯一的例外是空白。

function removeSpecials(str) {
    var lower = str.toLowerCase();
    var upper = str.toUpperCase();

    var res = "";
    for(var i=0; i<lower.length; ++i) {
        if(lower[i] != upper[i] || lower[i].trim() === '')
            res += str[i];
    }
    return res;
}

更新:请注意,此解决方案仅适用于有小写和大写字母的语言。在像中文这样的语言中,这是行不通的。

更新 2:当我进行模糊搜索时,我来到了原始解决方案。如果您还尝试删除特殊字符以实现搜索功能,则有更好的方法。使用任何可以仅从拉丁字符生成字符串的音译库,然后简单的 Regexp 将完成删除特殊字符的所有魔术。(这也适用于中国人,你也可以通过制作Tromsø==获得额外的好处Tromso)。

@EricMajerus 和印地语也是
2021-03-20 12:50:02
请注意,这也将数字视为特殊字符。
2021-03-30 12:50:02
感谢您提供这个非常有创意的解决方案。它更符合语言的实际工作方式,因为我们中的许多人不考虑“Привіт”或“æøå”特殊字符。大多数解决方案都会删除不属于英文字母表的任何字符。
2021-04-09 12:50:02
对我来说几乎是完美的答案,但不幸的是它认为汉字是特殊字符。
2021-04-09 12:50:02

我不懂 JavaScript,但不能使用正则表达式吗?

类似的东西[^\w\d\s]将匹配除数字、字符和空格之外的任何内容。在 JavaScript 中找到语法只是一个问题。

stackoverflow.com/a/4374890/2384606 这是您问题的答案:)
2021-03-17 12:50:02

搜索所有不(单词字符 || 空格):

str.replace(/[^\w ]/, '')
完美的!从字符串中删除所有特殊的 unicode 字符。
2021-03-29 12:50:02
这是我用来搜索名字+姓氏的一个很好的解决方案。它也处理重音字符 (é)。我添加了一个撇号来处理像 D'Angelo 这样的名字。
2021-04-04 12:50:02