255 votos

javascript regexp eliminar todos los caracteres especiales

Me gustaría una RegExp que eliminara todos los caracteres especiales de una cadena. Estoy intentando algo así pero no funciona en IE7 (que es lo que usa la intranet de los trabajos). Funciona en Firefox.

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

Soy pésimo con el RegExp, así que una descripción detallada de él también sería útil.

656voto

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

Como se mencionó en los comentarios es más fácil hacer esto como una lista blanca - reemplazar los caracteres que no son en su lista de seguridad.

El caret ( ^ ) el carácter es la negación del conjunto [...] , gi digamos global e insensible a las mayúsculas y minúsculas (esto último es un poco redundante pero quería mencionarlo) y la lista de seguridad en este ejemplo son los dígitos, los caracteres de las palabras, los subrayados ( \w ) y el espacio en blanco ( \s ).

120voto

noinput Puntos 79

Ten en cuenta que si aún quieres excluir un conjunto, incluyendo cosas como barras y caracteres especiales, puedes hacer lo siguiente:

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

tened en cuenta que para incluir también el carácter "menos", tenéis que escapar con una barra invertida como este último grupo. si no lo hacéis, también seleccionará el 0-9 que probablemente no sea el deseado.

8voto

Seagull Puntos 1222

La primera solución no funciona para ningún alfabeto UTF-8. (Cortará texto como Їжак). He conseguido crear funciones que no usan RegExp y usan un buen soporte de UTF-8 en el motor de JavaScript. La idea es simple, si el símbolo es igual en mayúsculas y minúsculas es un carácter especial. La única excepción es para los espacios en blanco.

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;
}

1voto

millebii Puntos 920

Utilizo RegexBuddy para depurar mis regexes, tiene casi todos los idiomas muy útiles. que copiar/pegar para el idioma de destino. Es una herramienta estupenda y no es muy cara.

Así que copié/pegué tu regex y tu problema es que [,] son personajes especiales en regex, así que necesitas escapar de ellos. Así que el regex debería ser..: /!@#$^&%*()+=-[ \x5B\x5D y que no se puede hacer nada más.

-1voto

AnD Puntos 500

¿por qué no haces algo como:

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

para comprobar si su entrada contiene algún carácter especial

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X