2012-05-03 24 views
15

Me encontré con un error en mi aplicación web que no estoy seguro de cómo solucionarlo.¿Quitar un largo guión de una cadena en JavaScript?

Los cuadros de texto me están enviando la larga carrera como parte de su contenido (ya sabes, el largo guión especial que MS Word inserta automáticamente a veces). Sin embargo, no puedo encontrar una manera de reemplazarlo; ya que si trato de copiar ese personaje y ponerlo en una declaración JavaScript str.replace, no se procesa correctamente y rompe la secuencia de comandos.

¿Cómo puedo solucionar esto?

El personaje específico que lo está matando es -.

Además, si es útil, paso el valor como un parámetro GET y luego lo codifico en XML y lo envío a un servidor.

+1

Eso es muy extraño. ¿Puedes publicar algún código para que podamos ver cómo aparecen los personajes en primer lugar? – Nadh

+0

Algo como 'str = str.replace ('&ldash;', '')'? –

Respuesta

30

Este código podría ayudar:

text = text.replace(/\u2013|\u2014/g, "-"); 

Sustituye todo– (-) y — (-) símbolos con guiones simples (-).

DEMO:http://jsfiddle.net/F953H/

+0

más simple: '/ \ u2013 | \ u2014/g' ;-) –

+0

Genial, funcionó. ¡Gracias! – cd6

3

Ese personaje es llamar a un Em Dash. Se puede reemplazar este modo:

str.replace('\u2014', '');​​​​​​​​​​ 

Aquí se muestra un ejemplo del violín: http://jsfiddle.net/x67Ph/

El \u2014 se llama unicode escape sequence. Estos permiten especificar un carácter unicode por su código. 2014 pasa a ser el Em Dash.

1

Hay tres guiones de larga ish Unicode que usted necesita preocuparse acerca de: http://en.wikipedia.org/wiki/Dash

Puede reemplazar los caracteres Unicode directamente usando el escape de Unicode:

'—my string'.replace(/[\u2012\u2013\u2014\u2015]/g, '') 
+0

Este código reemplazará solo la primera vez. Para reemplazar todas las ocurrencias, necesita una expresión regular con la bandera global: '/ regex/g' –

+0

Le dio una oportunidad, pero no dio ningún resultado, la aún apareció, y el javascript no la atrapó. – cd6

+0

Acabo de actualizar mi código para usar la expresión regular completa. Pruébelo ahora. –

2

puede haber más personajes se comportan como esto , y es posible que desee reutilizarlos en html más tarde. Una forma más genérica de manejarlo podría ser reemplazar todos los 'caracteres extendidos' con su equivalente en html. Podrías hacerlo así:

[yourstring].replace(/[\u0080-\uC350]/g, 
         function(a) { 
         return '&#'+a.charCodeAt(0)+';'; 
         } 
); 
Cuestiones relacionadas