JavaScriptのスプレッド演算子はサロゲートペアを1文字としないので関数作成

サロゲートペアとは

サロゲートペアとは計4バイトで表す文字。通常の文字は2バイトなのでサロゲートペア文字は'𠮷'.lengthのように実行すると1ではなく2とカウントされる。

そのため、正しくカウントするにはスプレッド構文を使用する必要がある。

'𠮷'.length; // 2
[...'𠮷'].length; // 1

サロゲートペア文字のカウント方法

以下のようにサロゲートペア文字の場合は2ではく1とカウントされる関数を作成して使用する。

function sLength(str) {
  return str.length - (str.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g).length - 1);
}
sLength('𠮷'); // 1

サロゲートペア文字の有無を調べる方法

以下のようにisSurrogatePair関数を作成する。

function isSurrogatePair(str) {
  return !!(str.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g).length - 1);
}
isSurrogatePair('𠮷野家'); // true
isSurrogatePair('吉野家'); // false

UTF-8ではないWebサイト内にサロゲートペア文字が含まれていると文字化けするので該当するサイトを運用している場合はPuppeteerなどでチェックをしたほうが良いだろう。

UTF-8 4バイト文字 HTML数値文字参照変換ツールというものがあるので変換が必要な場合はこちらを使用すると良いだろう。