2012-07-03 128 views
39

ユーザ入力(JSコード)を取ってリアルタイムで実行(処理)して、出力を表示します。JavaScript文字列からゼロ幅の空白文字を削除する

時にはコードの幅がゼロのスペースがあります。本当に変です。私はどのようにユーザーが入力しているのかわかりません。例 - "(​$".length === 3

JSのコードからその文字を削除する必要がありますか?JSコードを実行してブラウザがゼロにならないようにするにはどうすればいいですか?アカウントへの幅のスペース文字

+0

ゼロ幅文字があることをどのように推定しましたか?長さだけから? BMP以外の文字の長さは2文字です。文字列の最後に移動して左矢印キーを押すと、左矢印キーを2回押すまで左に移動しません。 –

+0

それは私が推測した方法です。 – user1437328

+0

次に、文字を分析する必要があります。数値コードを書き出すことによって。データには、左に移動するときに2つ以上の文字が1つの単位として扱われるように、結合マークが含まれている場合があります。 –

答えて

58

Unicodeは以下のゼロ幅の文字を持っています?。

  • U + 200Bゼロ幅スペース
  • U + 200Cゼロ幅非ジョイナーUnicodeコードポイント
  • U + 200Dゼロ幅建具Unicodeコードポイント
  • U + FEFFゼロ幅ノーブレークスペースUnicodeコードポイント
  • JavaScriptで文字列からそれらを削除するには

、あなたは単純な正規表現を使用することができます表示されない可能性があり、より多くのシンボルがあること

var userInput = 'a\u200Bb\u200Cc\u200Dd\uFEFFe'; 
console.log(userInput.length); // 9 
var result = userInput.replace(/[\u200B-\u200D\uFEFF]/g, ''); 
console.log(result.length); // 5 

注意を。例えば、ASCII’s control charactersのもの。

+3

[@IvánCastellanos記載](https://twitter.com/ivanca/status/354252316435689472)このために考えられるその他の文字:U + 200E左右のマークとU + 200Fの右から左マーク。私が言ったように、それ自体では厳密には見えない他のシンボルがあるかもしれません。 –

+0

DOMロード後にこれらの値が実際にページに存在するかどうかをどのように検出しますか?ありがとう! – blackhawk

+0

'var HTMLe = document.getElementsByTagName( 'html')[0]; HTMLe.outerHTML = HTMLe.outerHTML.replace(/ [\ u200B- \ u200D \ uFEFF \ u200E \ u200F]/g、 ''); '...それは、文字列がUnicode文字の文字列がある場合、これは動作しませんどのように –

0
[].filter.call(str, function(c) { 
    return c.charCodeAt(0) !== 8203; 
}); 

フィルター8203文字コード(ゼロ幅スペースのユニコード番号)を削除するには、各文字

5

私はいくつか目に見えない文字が私のJSONを破壊し、私のサイトをクラッシュしていました予期しないトークンILLEGAL例外を発生させた問題を抱えていました。ここで

は、RegExp変数を使用して、私のソリューションです:

Javascriptとあなたがここで見つけることができ、ゼロ幅スペースに関する
var re = new RegExp("\u2028|\u2029"); 
    var result = text.replace(re, ''); 

より: Zero Width Spaces

+0

や記号は、おそらく(IEで)遅くなります。しかし、知っているGoogleのV8では、おそらく速く走るだろう。 –

2
str.replace(/\u200B/g,''); 

200Bはゼロ幅スペース8203を16進数であります。これを削除するには、これを空の文字列に置き換えてください。

関連する問題