使用RegExp删除所有特殊字符

Tim*_*hle 214 javascript regex special-characters

我想要一个将从字符串中删除所有特殊字符的RegExp.我尝试这样的东西,但它在IE7中不起作用,虽然它适用于Firefox.

var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,.";

for (var i = 0; i < specialChars.length; i++) {
  stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}
Run Code Online (Sandbox Code Playgroud)

RegExp的详细描述也很有用.

ann*_*ata 579

var desired = stringToReplace.replace(/[^\w\s]/gi, '')
Run Code Online (Sandbox Code Playgroud)

正如评论中提到的那样,作为白名单更容易做到这一点 - 替换不在您的安全列表中的字符.

caret(^)字符是集合的否定[...],gi比如全局和不区分大小写(后者有点多余,但我想提一下),本例中的安全列表是数字,单词字符,下划线(\w)和空格(\s).

  • 此解决方案不适用于非英语符号."Їжак"例如. (42认同)
  • 您也可以使用大写\ W而不是^\w.\ W:匹配任何非单词字符.相当于[^ A-Za-z0-9_].https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions (4认同)
  • 要接受重音词,例如葡萄牙语,请执行以下操作: stringToReplace.replace(/[^A-zÀ-ú\s]/gi, '') (3认同)
  • 添加大多数欧洲语言(挪威语、瑞典语、德语、波尔图吉斯语、西班牙语)stringToReplace.replace(/[^\w\s\xc0-xff]/gi, '')。要包括其他语言,可以使用 unicode 范围。请参阅:/sf/ask/10502341/ (2认同)
  • 考虑到我不想要任何口音/特色菜,这对我来说是最好的。我什至不需要空间,我删除了“\s” (2认同)

noi*_*put 92

请注意,如果您仍想要排除某个集合,包括斜杠和特殊字符等内容,则可以执行以下操作:

var outString = sourceString.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');
Run Code Online (Sandbox Code Playgroud)

请特别注意,为了还包含"减号"字符,您需要使用反斜杠来逃避它,就像后一组一样.如果你不这样做,它也会选择0-9,这可能是不受欢迎的.

  • 优秀的解决方 接受的答案仅适用于英语,适用于任何语言(据我所知).谢谢 :) (9认同)
  • 我怎么能添加`-`? (2认同)

fre*_*dev 19

普通的Javascript正则表达式不处理Unicode字母.

不要使用[^\w\s],这将删除带重音的字母(如àèéìòù),更不用说西里尔文或中文,来自这些语言的信件将被删除.

你真的不想删除这些字母和所有特殊字符.你有两次机会:

  • 在你的正则表达式中添加你不想删除的所有特殊字符,
    例如:[^èéòàùì\w\s].
  • 看看xregexp.com.XRegExp通过\p{...}语法为Unicode匹配添加了基本支持.

var str = "????::: résd,$%& adùf"
var search = XRegExp('([^?<first>\\pL ]+)');
var res = XRegExp.replace(str, search, '',"all");

console.log(res); // returns "????::: resd,adf"
console.log(str.replace(/[^\w\s]/gi, '') ); // returns " rsd adf"
console.log(str.replace(/[^\wèéòàùì\s]/gi, '') ); // returns " résd adùf"
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • 很高兴了解国际化,我不知道JS regex不是UTF-8的。 (3认同)

小智 14

使用\W[a-z0-9]regex 不适用于非英语语言,如中文等,

最好在正则表达式中使用所有特殊字符并将它们从给定字符串中排除

str.replace(/[~`!@#$%^&*()+={}\[\];:\'\"<>.,\/\\\?-_]/g, '');
Run Code Online (Sandbox Code Playgroud)


Sea*_*ull 7

第一种解决方案不适用于任何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;
}
Run Code Online (Sandbox Code Playgroud)

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