浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【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の仕様を詳しくは把握してないので実務に用いるにはいくらか調査ないしテストが必要ですが、こちらはより手軽でまた違った良さがあります。

  • この記事いいね! (0)