2012-05-03 12 views
15

Ich bin in meiner Web-App auf einen Fehler gestoßen, von dem ich nicht weiß, wie ich ihn beheben soll.Entfernen Sie einen langen Strich aus einer Zeichenfolge in JavaScript?

Textfelder senden mir den langen Strich als Teil ihres Inhalts (Sie wissen, der spezielle lange Strich, den MS Word automatisch manchmal einfügt). Ich kann jedoch keinen Ersatz finden. Wenn ich versuche, dieses Zeichen zu kopieren und es in eine JavaScript-Anweisung str.replace zu schreiben, wird es nicht richtig gerendert und das Skript wird unterbrochen.

Wie kann ich das beheben?

Der spezifische Charakter, der es tötet ist -.

Auch wenn es hilft, übergebe ich den Wert als GET-Parameter, und dann in XML zu kodieren und es an einen Server zu senden. Hilfe

+1

Das ist sehr seltsam. Kannst du etwas Code posten, damit wir sehen können, wie die Charaktere überhaupt erscheinen? – Nadh

+0

Etwas wie 'str = str.replace ('&ldash;', '')'? –

Antwort

30

könnte Dieser Code:

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

Es ersetzt alle– (-) und — (-) Symbole mit einfachen Strichen (-).

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

+0

einfacher: '/ \ u2013 | \ u2014/g' ;-) –

+0

Großartig - das hat funktioniert. Vielen Dank! – cd6

3

Dieser Charakter ist ein Em Dash nennen. Sie können es wie so ersetzen:

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

Hier ist ein Beispiel Fiddle ist: http://jsfiddle.net/x67Ph/

Die \u2014 ist eine unicode escape sequence genannt. Diese erlauben es, ein Unicode-Zeichen durch seinen Code zu spezifizieren. 2014 ist zufällig der Em Dash.

1

Es gibt drei Unicode-lang-ish Striche Sie brauchen, um Sorgen zu machen: http://en.wikipedia.org/wiki/Dash

Sie Unicode-Zeichen direkt Flucht durch Verwendung des Unicode ersetzen:

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

Dieser Code würde nur das erste Vorkommen ersetzen. Um alle Vorkommen zu ersetzen, benötigen Sie eine Regex mit der globalen Flagge: '/ regex/g' –

+0

Gab das eine Aufnahme, aber ohne Wirkung - die - kam immer noch durch, und das Javascript nicht erwischt. – cd6

+0

Ich habe meinen Code aktualisiert, um den vollen Regex zu verwenden. Probieren Sie es jetzt aus. –

2

Es kann mehr Zeichen wie diese verhalten sein , und Sie können sie später in HTML wiederverwenden. Eine allgemeinere Möglichkeit, damit umzugehen, könnte darin bestehen, alle "erweiterten Zeichen" durch ihr html-kodiertes Äquivalent zu ersetzen. Sie könnten das tun:

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