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


Answers:


348

您应该使用带有单个正则表达式的字符串替换功能。假设使用特殊字符,您的意思不是字母,这是一种解决方案:

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


5
要在非拉丁字母使用此解决方案,请查看这个答案
efkan

这也将删除数字字符!
tech_geek

15
@tech_geek你可以做str.replace(/[^a-zA-Z0-9]/g, "")
Williams

2
实际上,您需要此str.replace(/[^a-zA-Z0-9 ]/g, "");通知,在0-9和]之间有一个空格
Ammar Shah

它需要进行一些调整,没有删除/或-字符,而camelCase的第一个字符应该是小写,但是这个要大写。
Sansun

133

您可以指定要删除的字符来执行此操作:

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

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

string = string.replace(/[^a-zA-Z0-9]/g, '');

4
如果我不想使用此空间怎么办?/[^a-zA-Z0-9]/g
aadi1295 2015年

8
@Arbaz禁止保留空格,只需将其添加到列出的白色字符中即可。您的正则表达式将为“ / [^ a-zA-Z0-9] / g”(9后注意空格)
Crhistian Ramirez

1
如果需要空格,这就是有效的答案。
弥敦道

这将替换()whitespaces.text().replace(/[ ()]/g, '')
插入

30

第一种解决方案不适用于任何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)。


感谢您提供这个颇具创意的解决方案。它与语言的实际工作方式更加相符,因为我们很多人都不考虑“Привіт”或“æøå”特殊字符。那里的大多数解决方案都会切掉不属于英文字母的任何字符。
亚历克斯·朗伯格

1
对我来说,这几乎是一个完美的答案,但不幸的是,它认为汉字是特殊字符。
埃里克·马耶鲁斯

@EricMajerus和印地文也一样
程序员,

请注意,这也将数字视为特殊字符。
just_user


8

我尝试了Seagul极富创造力的解决方案,但发现它也将数字视为特殊字符,这不符合我的需求。这是我对Seagul解决方案的(故障安全)调整...

//return true if char is a number
function isNumber (text) {
  if(text) {
    var reg = new RegExp('[0-9]+$');
    return reg.test(text);
  }
  return false;
}

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

您忘记reg在第一个函数中声明。
诺曼·阿里

6

不全部搜索(单词字符||空格):

str.replace(/[^\w ]/, '')

1

尝试使用这个

var result= stringToReplace.replace(/[^\w\s]/gi, '')

^克拉表示否定\ w表示[a-zA-Z0-9_]字字符,\ s表示空格/ [] / gi表示全球字符


0

点(。)可能不被认为是特殊的。我在Mozfet和Seagull的答案中添加了OR条件:

function isNumber (text) {
      reg = new RegExp('[0-9]+$');
      if(text) {
        return reg.test(text);
      }
      return false;
    }

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '') || (lower[i].trim() === '.')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

0

const input = `#if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' # 
Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) ==  '20-09-2019' #
Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' #
AdestraSID<hello@imimobile.co> #else_1#Test27919<alerts@imimobile.com>#endif_1#`;
const replaceString = input.split('$(').join('->').split(')').join('<-');


console.log(replaceString.match(/(?<=->).*?(?=<-)/g));


-11

您要从字符串中删除谁的特殊字符,准备它们的列表,然后使用JavaScript替换功能删除所有特殊字符。

var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));

或者,您可以对整个字符串运行循环,并将单个字符与ASCII代码进行比较,然后重新生成新的字符串。


9
不,请不要那样做。真的非常慢。使用正则表达式要好得多。
基思·欧文

该解决方案非常适合替换一个字符。就我而言,这很有帮助,谢谢。
Vahid Najafi

与其多次使用replace方法,请仅通过正则表达式使用一次。
FAISAL
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.