javascript正则expression式删除所有特殊字符

我想要一个RegExp,它将删除string中的所有特殊字符。 我正在尝试这样的东西,但它不工作在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, '') 

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

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

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

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

需要特别注意的是,为了还包括“减号”字符,你需要像后一组一样用一个反斜杠来转义它。 如果你不这样做,它也会select0-9这可能是不受欢迎的。

纯Javascript正则expression式不处理Unicode字母 。 不要使用[^\w\s] ,这会删除带有口音的字母(比如àèéìòù),不会提到西里尔文或中文,这样的语言字母将会被删除。

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

  • 在你的正则expression式中join所有你不想删除的特殊字符,
    例如: [^èéòàùì\w\s]
  • 看看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(/[^\w\s]/gi, '') ); // returns " rsd adf" console.log(str.replace(/[^\wèéòàùì\s]/gi, '') ); // returns " résd adùf" 
 <script src="ajax/libs/xregexp/3.1.1/xregexp-all.js"></script> 

第一个解决scheme不适用于任何UTF-8 alphabenben。 (它会剪切文字,如Їжак)。 我设法创build了不使用RegExp的function,并在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; } 

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

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

检查你的input是否包含任何特殊字符

我使用RegexBuddy debbuging我的正则expression式几乎所有的语言非常有用。 比复制/粘贴目标语言。 了不起的工具,并不是很昂贵。

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

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

jQuery Form Validator通过在HTML标签处添加数据validation属性使得它更加简单。 检查它的网站。

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