17

Webアプリで、修正方法がわからないというエラーが発生しました。

テキストボックスから、コンテンツの一部として長いダッシュが送信されます(MS Wordが自動的に挿入する特別な長いダッシュが表示されることがあります)。しかし、私はそれを置き換える方法を見つけることができません。その文字をコピーしてJavaScriptのstr.replaceステートメントに入れようとすると、正しくレンダリングされず、スクリプトが壊れてしまうためです。

どうすればこれを修正できますか?

それを殺している特定のキャラクターは—です。

また、役立つ場合は、値をGETパラメーターとして渡し、XMLでエンコードしてサーバーに送信します。

4

5 に答える 5

42

このコードは役立つかもしれません:

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

すべての –(–)および—(—)記号を単純なダッシュ(-)に置き換えます。

デモ:http: //jsfiddle.net/F953H/

于 2012-05-03T17:38:19.760 に答える
3

そのキャラクターはEmDashと呼ばれます。次のように置き換えることができます。

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

フィドルの例を次に示します:http://jsfiddle.net/x67Ph/

これは、 Unicodeエスケープシーケンス\u2014と呼ばれます。これらは、そのコードによってユニコード文字を指定することを可能にします。2014年はたまたまEmDashです。

于 2012-05-03T17:38:52.900 に答える
2

あなたが心配する必要がある3つのユニコードの長いダッシュがあります:http://en.wikipedia.org/wiki/Dash

Unicodeエスケープを使用して、Unicode文字を直接置き換えることができます。

'—my string'.replace( /[\u2012\u2013\u2014\u2015]/g, '' )
于 2012-05-03T17:40:16.710 に答える
2

このように動作する文字がさらにある可能性があり、後でそれらをhtmlで再利用することをお勧めします。これに対処するためのより一般的な方法は、すべての「拡張文字」をhtmlでエンコードされた同等の文字に置き換えることです。あなたはこのようにそれを行うことができます:

[yourstring].replace(/[\u0080-\uC350]/g, 
                      function(a) {
                        return '&#'+a.charCodeAt(0)+';';
                      }
);
于 2012-05-03T17:52:35.603 に答える
1

ECMAScript 2018標準により、JavaScriptRegExpはUnicodeプロパティ(またはカテゴリ)クラスをサポートするようになりました。そのうちの1つ\p{Dash}、、はダッシュであるUnicode文字ポイントと一致します。

/\p{Dash}/gu

ES5では、同等の式は次のとおりです。

/[-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2053\u207B\u208B\u2212\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u2E5D\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D]|\uD803\uDEAD/g

Unicodeユーティリティリファレンスを参照してください。

JavaScriptの例を次に示します。

const text = "Dashes: \uFF0D\uFE63\u058A\u1400\u1806\u2010-\u2013\uFE32\u2014\uFE58\uFE31\u2015\u2E3A\u2E3B\u2053\u2E17\u2E40\u2E5D\u301C\u30A0\u2E1A\u05BE\u2212\u207B\u208B\u3030";
const es5_dash_regex = /[-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2053\u207B\u208B\u2212\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u2E5D\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D]|\uD803\uDEAD/g;
console.log(text.replace(es5_dash_regex, '-')); // Normalize each dash to ASCII hyphen
// => Dashes: ----------------------------

1つ以上のダッシュを一致させ、1つの文字に置き換える(または一度に削除する)には、次のようにします。

/\p{Dash}+/gu
/(?:[-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2053\u207B\u208B\u2212\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u2E5D\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D]|\uD803\uDEAD)+/g
于 2021-12-15T10:19:35.287 に答える