2010-09-23 26 views
34

necesita una función de quitarse un conjunto de caracteres no válidos en javascript: |&;$%@"<>()+,cadena JavaScript reemplazar con expresiones regulares a quitarse caracteres ilegales

Este es un problema clásico que hay que resolver con expresiones regulares, lo que significa que ahora I have 2 problems.

Esto es lo que tengo hasta ahora:

var cleanString = dirtyString.replace(/\|&;\$%@"<>\(\)\+,/g, ""); 

huyo los caracteres especiales de expresiones regulares con una barra invertida pero estoy teniendo un tiempo difícil tratando de entender lo que está pasando.

Si trato con literales simples en aislamiento la mayoría de ellos parecen funcionar, pero una vez que los junté en la misma expresión regular dependiendo del orden, el reemplazo está roto.

es decir, esto no funcionará ->dirtyString.replace(/\|<>/g, ""):

Ayuda apreciado!

+2

Con un simple 'bucle for', no hay ninguna posibilidad de malos entendidos :) –

+0

si tuviera no SO eso es lo que habría hecho :) – JohnIdol

Respuesta

60

Lo que se necesita son character classes. En eso, solo debe preocuparse por los caracteres ], \ y - (y ^ si lo coloca inmediatamente después del comienzo de la clase de caracteres "[").

Sintaxis: [caracteres] donde caracteres es una lista con los personajes.

Ejemplo:

var cleanString = dirtyString.replace(/[|&;$%@"<>()+,]/g, ""); 
+1

¿hay caracteres de escape no necesarios dentro de la clase de caracteres? – JohnIdol

+5

No, solo para ']' y '\' (y '^' a menos que lo coloque en cualquier lugar que no sea en la primera posición, y '-' a menos que lo ponga primero o último). –

+0

Faltan algunos caracteres especiales ... – ViliusL

5

Debe envolverlos todos en una clase de caracteres. La versión actual significa reemplazar esta secuencia de caracteres con una cadena vacía. Cuando se envuelve entre corchetes significa que se reemplaza cualquier de estos caracteres con una cadena vacía.

var cleanString = dirtyString.replace(/[\|&;\$%@"<>\(\)\+,]/g, ""); 
4

ponerlos en soportes []:

var cleanString = dirtyString.replace(/[\|&;\$%@"<>\(\)\+,]/g, ""); 
61

tiendo a mirarlo desde la perspectiva inversa que puede ser lo que pretende:

¿Qué personajes es lo que quiero para permitir?

Esto se debe a que podría haber lots of characters que forman una cuerda que de alguna manera explota y no se espera.

Por ejemplo éste sólo permite letras y números eliminación de grupos de caracteres no válidos reemplazándolos con un hypen:

"This¢£«±Ÿ÷could&*()\/<>[email protected]#$%^bad".replace(/([^a-z0-9]+)/gi, '-'); 
//Result: "This-could-be-bad" 
Cuestiones relacionadas