JavaScriptで絵文字の正確な長さを取得する

投稿者: Anonymous

JavaScriptで絵文字の正確な長さを取得したいのですが、うまくいきません。
?(蛇の絵文字)は1文字なので 1 を期待しているのですが、2 が 返ってきてしまいます。
Firefox, Node.js, io.js などいろいろなもので試しましたが、やはり 2 が返ってきています。
どうすれば、正確な長さを取得できるのでしょうか?


var my_string = "?"; // 蛇の絵文字
var str_length = my_string.length;
console.log(str_length); // 2

解決

絵文字はサロゲートペアと呼ばれる領域に格納されています代用符号を用いた2個組の文字で構成されます。
サロゲートペアを間引いた数が可視文字の数となります。

var my_string = "?";
var str_length = my_string.length - (my_string.split(/[uD800-uDBFF][uDC00-uDFFF]/g).length - 1);
print(str_length); // 1

追記

ちょっと改良

var my_string = "?";
var str_length = my_string.length - (my_string.match(/[uD800-uDBFF][uDC00-uDFFF]/g)||[]).length;
print(str_length); // 1
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *