文字列内のすべてのUnicode文字を削除しようとしています。初期プロトタイプとしてjavacriptでさまざまな範囲のUnicode文字を削除します
\uD800-\uDFFF
\u1D800-\u1DFFF
\u2D800-\u2DFFF
\u3D800-\u3DFFF
\u4D800-\u4DFFF
\u5D800-\u5DFFF
\u6D800-\u6DFFF
\u7D800-\u7DFFF
\u8D800-\u8DFFF
\u9D800-\u9DFFF
\uAD800-\uADFFF
\uBD800-\uBDFFF
\uCD800-\uCDFFF
\uDD800-\uDDFFF
\uED800-\uEDFFF
\uFD800-\uFDFFF
\u10D800-\u10DFFF
、私はちょうどreplace
関数で正規表現を使用して第1の範囲内で文字を削除しようとしました。
var buffer = "he\udfffllo world";
var output = buffer.replace(/[\ud800-\udfff]/g, "");
d.innerText = buffer + " is replaced with " + output;
この場合、文字は正常に置き換えられたようです。しかし
、私は
var buffer = "he\udfffllo worl\u1dfffd";
var output = buffer.replace(/[\ud800-\udfff\u1d800-\u1dfff]/g, "");
d.innerText = buffer + " is replaced with " + output;
と私は予想外の何かを見ることを交換してください。 \u1dff
が取得する -
\u1dfff
は1つの文字として表示されない:ハローworl᷿fdがに置き換えられ
ここで注意すべき二つのものがありますよう私の出力が現れます文字に変換された末尾の
f
は、それ自体の文字として扱われます。- 結果は空の文字列です。
これをどのように達成できるかについてのご意見は、大変ありがたくあります。
EDIT
私の全体的な目標は、encodeURIComponent
機能が無効とみなし、すべての文字をフィルタリングすることです。私はいくつかのテストを実行し、上記のリストが無効な文字のセットであることを発見しました。たとえば、最初に1dfff
をUnicode文字に変換してからencodeURIComponent
に渡すコードでは、後者の関数によって例外が発生します。
var v = String.fromCharCode(122879);
var uriComponent = encodeURIComponent(v);
@Blender iはUnicode文字を表現するために私のコードでx
代わりのu
を使用していたことを指摘した後、私は質問の部分を編集しました。
EDIT 2
私は「無効」ユニコードは、さらに範囲をフェッチするための私の技術を調査し、そしてそれは結局のところ、あなたがより大きな16ビットの番号をString.fromCharacterCode
与えれば、それはよ数字の下位16ビットを見てください。それは私が見ていたパターンを説明しています。それが判明したので、私は最初の範囲について心配する必要があります。
'\ xdfff'が\のxdf'、' F'と '' F'として解釈されます。 – Blender
あなたは正しいです、なぜ私は2回目の試みで奇妙な結果を見ていたのかを説明します。今質問のその部分を変更する。 –
'\ u1D800'という表記法と他の表記法の大部分はまったく有効ではありません(技術的には、\ u1D800はU + 1D80の後に0を意味します。 –