【JavaScript】文字列長を見たままに数えるライブラリobtain-unicodeの紹介

 JavaScriptで文字列長を得る時にはよく length プロパティを用いますが、これは時折見たままの文字列長を返してくれません。

 これはJavaScriptのString.lengthが文字数でなくUTF-16コード単位の数を返しているためです。

このプロパティは、文字列内のコード単位の数を返します。UTF-16(JavaScript によって使われるフォーマット)は、基本的な文字を表すためには 1 つの 16 ビットを使用しますが、一般的に使用されない文字を表すために 2 つの 16 ビットを使用する場合があるので、実際の文字数と一致していない可能性があります。
String.length – JavaScript | MDN

 上記にある様に文字列長でなく16ビットが使われている数を返します。このため異体字、絵文字のような一般的に使用されない文字のString.lengthは実際の文字数と合いません。obtain-unicodeはこの複数の16ビットから成る一文字を一つのUnicodeに変換するライブラリです。
Jxck/obtain-unicode: implementation of convert a DOMString to a sequence of Unicode characters at http://www.w3.org/TR/WebIDL/#dfn-obtain-unicode
 これを通すと文字数=長さになります。

 これを使うことで見た目通りの文字数を取得することができました。
 余談ですが配列を経由することでもそれらしくなります。Array.fromの仕様を詳しくは把握してないので実務に用いるにはいくらか調査ないしテストが必要ですが、こちらはより手軽でまた違った良さがあります。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG