Удалить длинную тире из строки в JavaScript?

Я обнаружил ошибку в своем веб-приложении, что я не уверен, как это исправить.

Текстовые поля отправляют мне длинную тире как часть их содержимого (вы знаете, специальный длинный штрих, который MS Word автоматически вставляет иногда). Однако я не могу найти способ заменить его; так как если я попытаюсь скопировать этот символ и поместить его в оператор JavaScript str.replace, он не будет отображаться правильно, и он сломает script.

Как я могу это исправить?

Конкретный характер, который его убивает -.

Кроме того, если это помогает, я передаю значение как параметр GET, а затем кодирую его в XML и отправляя на сервер.

Ответы

Ответ 1

Этот код может помочь:

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

Он заменяет символы all – (-) и — (-) простыми штрихами (-).

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

Ответ 2

Этот символ вызывает Em Dash. Вы можете заменить его так:

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

Вот пример Fiddle: http://jsfiddle.net/x67Ph/

\u2014 называется unicode escape-последовательность. Они позволяют указывать символ Юникода по его коду. 2014 - это Эм-Даш.

Ответ 3

В этом случае может быть больше персонажей, и вы можете повторно использовать их в html позже. Более общий способ борьбы с ним может заключаться в замене всех "расширенных символов" их эквивалентом, закодированным в HTML. Вы могли бы сделать это Вот так:

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

Ответ 4

Есть три юникодовых длинно-тихих штриха, о которых вам нужно беспокоиться: http://en.wikipedia.org/wiki/Dash

Вы можете заменить символы Unicode напрямую, используя escape-код unicode:

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