使用RegEx删除所有特殊字符

时间:2010-12-07 08:47:02

标签: 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"), "");
}

RegExp的详细说明也会有所帮助。

9 个答案:

答案 0 :(得分:544)

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

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

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

答案 1 :(得分:86)

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

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

请特别注意,为了还包含“减号”字符,您需要使用反斜杠(如后一组)来转义它。如果你不这样做,它也会选择0-9,这可能是不受欢迎的。

答案 2 :(得分:18)

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

不要使用didReceiveRemoteNotifications,这将删除带重音的字母(如àèéìòù),更不用说西里尔文或中文,来自这些语言的字母将被删除。

您真的不想将这些字母与所有特殊字符一起删除。你有两次机会:

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

\p{...}
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"

答案 3 :(得分: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;
}

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

更新2:我在进行模糊搜索时找到了原始解决方案。如果您还尝试删除特殊字符以实现搜索功能,则有一种更好的方法。使用任何只能用拉丁字符生成字符串的transliteration library,然后简单的Regexp将完成删除特殊字符的所有魔法。 (这也适用于中国人,你也可以通过Tromsø == Tromso)获得附带好处。

答案 4 :(得分:1)

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

所以我复制/粘贴你的正则表达式,你的问题是[,]是正则表达式中的特殊字符,所以你需要逃避它们。所以正则表达式应该是:/!@#$ ^&amp;%*()+ = - [\ x5B \ x5D] \ / {} |:&lt;&gt;?,。/ im

答案 5 :(得分:1)

str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")我做了这样的事。 但有些人比str.replace(/\W_/g,"");

更容易做到这一点

答案 6 :(得分:0)

为什么你不这样做:

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

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

答案 7 :(得分:0)

使用 \W[a-z0-9] 正则表达式不适用于中文等非英语语言,

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

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

答案 8 :(得分:-7)

使用正则表达式 ^[^/\\()~!@#$%^&*{«»„““”‘’|\n\t….,;`^"<>'}+:?®©]*$