我想要一个将从字符串中删除所有特殊字符的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,这可能是不受欢迎的。
不要使用[^\w\s]
,这将删除带重音的字母(如àèéìòù),更不用说西里尔文或中文,来自这些语言的字母将被删除。
你真的不想删除这些字母和所有特殊字符。你有两次机会:
[^èéòàùì\w\s]
。\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:当我进行模糊搜索时,我找到了原始解决方案。如果您还尝试删除特殊字符以实现搜索功能,则有一种更好的方法。使用任何transliteration library只能从拉丁字符产生字符串,然后简单的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);
检查您的输入是否包含任何特殊字符
使用正则表达式^[^/\\()~!@#$%^&*{«»„““”‘’|\n\t….,;`^"<>'}+:?®©]*$