Eliminar todos los caracteres especiales con RegExp

Me gustaría un RegExp que elimine todos los caracteres especiales de una cadena. Estoy intentando algo como esto pero no funciona en IE7, aunque funciona en Firefox.

var specialChars = "!@#$^&%*()+=-[]\/{}|:?,."; for (var i = 0; i < specialChars.length; i++) { stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), ""); } 

Una descripción detallada de RegExp sería útil también.

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

Como se mencionó en los comentarios, es más fácil hacer esto como una lista blanca: reemplace los caracteres que no están en su lista segura.

El carácter de intercalación ( ^ ) es la negación del conjunto [...] , gi dice global y no distingue entre mayúsculas y minúsculas (este último es un poco redundante, pero quería mencionarlo) y la lista segura en este ejemplo son dígitos, caracteres de palabra , guiones bajos ( \w ) y espacios en blanco ( \s ).

Tenga en cuenta que si aún desea excluir un conjunto, incluidos elementos como barras y caracteres especiales, puede hacer lo siguiente:

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

tenga en cuenta que para incluir también el carácter “menos”, debe escapar con una barra inversa como este último grupo. si no lo hace, también seleccionará 0-9, que probablemente no sea deseado.

La expresión regular de Javascript no maneja las letras Unicode .

No use [^\w\s] , esto eliminará las letras con acentos (como àèéìòù), sin mencionar el cirílico o el chino, las letras que provengan de dichos idiomas se eliminarán por completo.

Realmente no desea eliminar estas letras junto con todos los caracteres especiales. Tienes dos posibilidades:

  • Agrega en tu expresión regular todos los caracteres especiales que no quieras eliminar,
    por ejemplo: [^èéòàùì\w\s] .
  • Eche un vistazo a xregexp.com . XRegExp agrega soporte base para la coincidencia Unicode a través de la syntax \p{...} .
 var str = "Їжак::: résd,$%& adùf" var search = XRegExp('([^?\\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" 
  

La primera solución no funciona con ningún alfabeto UTF-8. (Cortará texto como Їжак). He logrado crear una función que no usa RegExp y uso una buena compatibilidad con UTF-8 en el motor de JavaScript. La idea es simple si un símbolo es igual en mayúsculas y minúsculas es un carácter especial. La única excepción se hace para espacios en blanco.

 function removeSpecials(str) { var lower = str.toLowerCase(); var upper = str.toUpperCase(); var res = ""; for(var i=0; i 

Actualización: tenga en cuenta que esta solución funciona solo para idiomas en los que hay letras mayúsculas y minúsculas. En idiomas como el chino, esto no funcionará.

Uso RegexBuddy para depurar mis expresiones regulares, tiene casi todos los idiomas muy útiles. Que copiar / pegar para el idioma de destino. Excelente herramienta y no muy caro.

Así que copié / pegué su expresión regular y su problema es que [,] son ​​caracteres especiales en expresiones regulares, por lo que debe escapar de ellos. Así que la expresión regular debería ser: /!@#$^&%*()+=-[\x5B\x5D]\/{}|:<>?,./im

¿Por qué no haces algo como esto?

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

para comprobar si su entrada contiene algún char especial

str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "") Hice algo así. Pero hay algunas personas que lo hicieron mucho más fácil, como str.replace(/\W_/g,"");

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