使用RegExp删除所有特殊字符

2020/10/10 19:41 · javascript ·  · 0评论

我想要一个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(/[^\w\s]/gi, '')

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

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

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

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

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

纯Javascript regex不处理Unicode字母

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

您真的不想删除这些字母以及所有特殊字符。您有两种机会:

  • 在您的正则表达式中添加所有不想删除的特殊字符,
    例如:[^èéòàùì\w\s]
  • 看看xregexp.comXRegExp通过\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"
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.js"></script>

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

我使用RegexBuddy对我的正则表达式进行调试,它几乎具有所有有用的语言。比复制/粘贴目标语言。很棒的工具,也不是很昂贵。

因此,我复制/粘贴了您的正则表达式,您的问题是[,]是正则表达式中的特殊字符,因此您需要对其进行转义。因此正则表达式应为:/!@#$^&%*()+=-[\x5B\x5D]\/{}|:<>?../im

str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")我确实是这样 但是有些人做起来容易得多str.replace(/\W_/g,"");

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

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

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

本文地址:http://javascript.askforanswer.com/shiyongregexpshanchusuoyouteshuzifu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!