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"), "");
}
También sería útil una descripción detallada de RegExp.
javascript
regex
special-characters
Timothy Ruhle
fuente
fuente
Respuestas:
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 caret (
^
) es la negación del conjunto[...]
,gi
digamos 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 es dígitos, caracteres de palabras, guiones bajos (\w
) y espacios en blanco (\s
)fuente
Tenga en cuenta que si aún desea excluir un conjunto, incluidas barras y caracteres especiales, puede hacer lo siguiente:
tome nota especial de que para incluir también el carácter "menos", debe escapar con una barra diagonal inversa como el último grupo. si no lo hace, también seleccionará 0-9, que probablemente no sea deseado.
fuente
?
del juego de caracteres hacia el frente. esto enumera los caracteres que desea eliminar, por lo que excluirlo de ser despojado lo incluirá inherentemente en el resultado final.La expresión regular Javascript simple no maneja letras Unicode .
No lo use
[^\w\s]
, esto eliminará letras con acentos (como àèéìòù), sin mencionar al cirílico o chino, las letras que provienen de dichos idiomas se eliminarán por completo.Realmente no desea eliminar estas letras junto con todos los caracteres especiales. Tienes dos posibilidades:
por ejemplo:
[^èéòàùì\w\s]
.\p{...}
sintaxis.fuente
La primera solución no funciona para ningún alfabeto UTF-8. (Cortará texto como Їжак). He logrado crear una función que no utiliza RegExp y utiliza un buen soporte 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.
Actualización: Tenga en cuenta que esta solución funciona solo para idiomas donde hay letras minúsculas y mayúsculas. En idiomas como el chino, esto no funcionará.
Actualización 2: llegué a la solución original cuando estaba trabajando en una búsqueda difusa. Si también intenta eliminar caracteres especiales para implementar la funcionalidad de búsqueda, existe un mejor enfoque. Utilice cualquier biblioteca de transliteración que produzca su cadena solo de caracteres latinos y luego el Regexp simple hará toda la magia de eliminar caracteres especiales. (Esto también funcionará para los chinos y también recibirá beneficios secundarios al hacer
Tromsø
==Tromso
).fuente
Uso RegexBuddy para depurar mis expresiones regulares, tiene casi todos los idiomas muy útiles. Que copiar / pegar para el idioma de destino. Herramienta fabulosa y no muy cara.
Así que copié / pegué su expresión regular y su problema es que [,] son caracteres especiales en la expresión regular, por lo que debe escapar de ellos. Entonces la expresión regular debe ser: /!@#$^&%*()+=-[\x5B\x5Dfont>\/{}|:<>?,./im
fuente
¿Por qué no haces algo como:
para verificar si su entrada contiene algún carácter especial
fuente
èéòàùì
y, en algunos casos, esta no será la soluciónstr.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")
Hice algo así. Pero hay algunas personas que lo hicieron mucho más fácil comostr.replace(/\W_/g,"");
fuente
\W
contiene algunos de los caracteres. ¿Pero por qué filtrarías los números? Esos no son personajes especiales.