2012-01-23 77 views
42

tengo una cadena como esta:jQuery eliminar los caracteres especiales de la cadena y más

var str = "I'm a very^ we!rd* Str!ng."; 

Lo que me gustaría hacer es eliminar todos los caracteres especiales de la cadena anterior y sustituir los espacios y en caso de que se está tecleando , subraya, con un carácter.

La cadena anterior se parecería a esto después de la "transformación":

var str = 'im-a-very-werd-strng'; 
+0

En primer lugar, es probable que utilizar comillas dobles para la cadena, porque hay una comilla simple en el interior. –

+0

Tienes razón, pero fue solo un ejemplo. Lo siento por eso. – Roel

+1

¿por qué está etiquetado como jQuery? el procesamiento de texto no tiene nada que ver con jQuery. – gonchuki

Respuesta

97

replace(/[^a-z0-9\s]/gi, '') filtra la cadena reducido a sólo valores alfanuméricos y replace(/[_\s]/g, '-') reemplazará subrayados y espacios con guiones:

str.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-') 

Fuente de expresiones regulares: RegEx for Javascript to allow only alphanumeric

Aquí está una demostración: http://jsfiddle.net/vNfrk/

+2

* Comentario de [Daniel Przybylowski] (http://stackoverflow.com/users/3941987/daniel-przybylowski): * Parece que el guión bajo se elimina con la primera expresión regular. Entonces, el segundo podría ser como: replace (/ \ s {1,}/g, '-') La razón para un cuantificador es reemplazar uno o más espacios con '-'. Por qué ? Imagine una cadena como "algo y algo". –

+0

¡Muchas gracias por esto! – Yass

+0

¿Qué es lo que hace? –

21

Suponiendo por "especial" que quiere decir caracteres que no son palabras, entonces eso es bastante fácil.

str = str.replace(/[_\W]+/g, "-") 
+0

Quiero eliminar los caracteres que no son palabras (o reemplazarlos por 'nada'). Quiero mantener los números y las letras normales y quiero reemplazar los espacios y guiones bajos con una franja horizontal. – Roel

+0

Esa es la respuesta más poderosa. Simple pero poderoso ..! – KeepMove

+1

Vale la pena señalar que a diferencia de todas las respuestas anteriores, esta en realidad trata con "foo & bar" como este "foo-bar" y no como este "foo-bar". Corto, simple y hace el trabajo perfecto! –

13
str.toLowerCase().replace(/[\*\^\'\!]/g, '').split(' ').join('-') 
1

Ya que no puedo comentar sobre la respuesta de Jasper, me gustaría señalar un pequeño error en su solución:

str.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-'); 

El problema es que el primer código elimina todos los guiones y luego trata de reemplazarlos :) Debe revertir las llamadas de reemplazo y también agregar guión para reemplazar segunda expresión regular. De esta manera:

str.replace(/[_\s]/g, '-').replace(/[^a-z0-9-\s]/gi, ''); 
1

borrar los números, guión bajo, espacios en blanco y caracteres especiales de la sentencia de cadena.

str.replace(/[0-9`[email protected]#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,''); 

Demo

Cuestiones relacionadas