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.
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:
[^èéòàùì\w\s]
. \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….,;`^"<>'}+:?®©]*$