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

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

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

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


当前回答

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

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

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

其他回答

我使用RegexBuddy调试我的正则表达式,它几乎所有的语言都非常有用。而不是复制/粘贴目标语言。 很棒的工具,而且不贵。

所以我复制/粘贴了你的正则表达式,你的问题是[,]是正则表达式中的特殊字符,所以你需要转义它们。因此,正则表达式 : /!@#$^&%*()+=-[\ x5B \ x5D ]\/{}|:<>?,./ 即时通讯

第一种解决方案不适用于任何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将执行删除特殊字符的所有魔法。(这对中国人也适用,你也会通过制作特罗姆瑟得到额外的好处)。

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

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

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

你为什么不做这样的事情:

re = /^[a-z0-9 ]$/i;
var isValid = re.test(yourInput);

来检查您的输入是否包含任何特殊字符

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

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

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