使用RegExp删除所有特殊字符

我想要一个RegExp,它将删除字符串中的所有特殊字符。 我正在尝试这样的东西,但它在IE7中不起作用,尽管它在Firefox中起作用。

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

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

RegExp的详细描述也会有帮助。


var desired = stringToReplace.replace(/[^ws]/gi, '')

正如评论中提到的那样,将其作为白名单更容易 - 替换不在安全列表中的字符。

插入符( ^ )字符是否定[...]gi表示全局和不区分大小写(后者有点多余,但我想提及它),本例中的安全列表是数字,字符,下划线( w )和空格( s )。


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

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

需要特别注意的是,为了还包括“减号”字符,您需要使用后一组的反斜杠进行转义。 如果你不这样做,它也会选择0-9,这可能是不希望的。


纯Javascript正则表达式不处理Unicode字母 。 不要使用[^ws] ,这将删除带有重音符号的字母(比如àèéìòù),更不用说西里尔语或中文,来自这些语言的信件将被完全删除。

你真的不想把这些字母和所有特殊字符一起删除。 你有两个机会:

  • 在你的正则表达式中加入你不想删除的所有特殊字符,
    例如: [^èéòàùìws]
  • 看看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(/[^ws]/gi, '') ); // returns " rsd adf"
    console.log(str.replace(/[^wèéòàùìs]/gi, '') ); // returns " résd adùf"
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.js"></script>
    链接地址: http://www.djcxy.com/p/95201.html

    上一篇: Remove all special characters with RegExp

    下一篇: 8 MySQL and Charset