特異な絵文字をフィルターする基本コード
フィルターの指標に「特異な絵文字の先頭サロゲートペア」を使います。 フィルター部のコードは、以前に使った絵文字フィルターの応用です。 最初にフィルターパターンを作り、「 RegExp() 」で正規表現オブジェクトを作ります。 それを使ってアクティブ行に「 test() 」メソッドを実行します。
「test」は、特異な絵文字がアクティブ行に有った場合は、「手作業で削除してください」を表示します。 また、変数 「zero_stop」を「1」にして、以降のマーク文字削除のコードに削除を中止させます。
フィルターパターンの「zero_pattern」は、先頭サロゲートペアの文字コードを並べたものです。 以下は実際のパターンで、前ページの最後のリストの太字部を使っています。(配列の最後の「,」は errorでしたが、最近の JavaScriptでは許可されます)
フィルターパターンに加える特殊な例外
前ページでふれましたが、Win10絵文字の総チェックで判明した、「例外的」に特異な絵文字コードをフィルターパターンに追加します。
囲み数字
以下の絵文字は2文字のカーソル位置ズレを生じます。
#️⃣ *️⃣ 0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣
「 #️⃣ 」のコードは「 \u0023\uFE0F\u20E3 」
「 *️⃣ 」のコードは「 \u002A\uFE0F\u20E3 」
「 0️⃣ ~ 9️⃣ 」のコードは「 \u0030\uFE0F\u20E3 ~ \u0039\uFE0F\u20E3 」
これらをフィルターパターンに追加するテストで、想定外のトラブルがありました。
パターンは、これらの絵文字のコードを入れただけですが、テストをするとスクリプト全体が異常動作をします。 調べると「'\u002A\uFE0F\u20E3'」の行を加えた時だけ異常が発生し、「\u002A」が問題を引き起こす様です。 ネットを調べても情報がありせんが、色々試すと、下の様に[ ]で囲むと正常になり「 *️⃣ 」の文字にも正しくフィルターが働きます。「\u002A」が特別な意味を持つのでしょうか?
先頭がサロゲートペアでない絵文字で異体字セレクタが付いたもの
異体字セレクタ「\uFE0F」が付く絵文字はサロゲートペアが先頭に来るものが殆どですが、上記の「囲み数字」以外に「 ⛹️♀️ ⛹️♂️ 」の2文字だけは先頭が通常の形です。
文字コードは2つあります。
\u26F9\uFE0F\u200D\u2640\uFE0F
\u26F9\uFE0F\u200D\u2642\uFE0F
これも3文字のズレを生じるので、「\u26F9\uFE0F」をフィルターに追加します。
〔参考〕この文字コード先頭の「\u26F9」だけで、Win10の Chrome上では上図のバスケ選手が表示されます。 一方、Win10タッチキーボードからは異体字セレクタ「\uFE0F」が着いた「 ⛹️♀️ ⛹️♂️ 」の2文字が入力され、下はこれを拡大したものです。
上側はヘアーバンドをした女子選手、下側は「\u26F9」と同じ、つまり男子選手の様です。 異体字セレクタで「男女」の違いを使い分けられる様にしているのでしょう。 ただし、Win7環境ではこの絵文字がOSに無いため、下の様に「twemoji」が代替表示されます。
以下に面白い方法を書いた記事があります。
WindowsでUnicode文字を簡単に入力したり、Unicodeの文字コード番号を調べたりする方法
Win10の「Wordpad」で「\u26F9」をこのページの方法で試すと、下の様な旧来のモノクロの絵文字が表示されます。
本来「\u26F9」だけならモノクロの絵文字が表示される様に思うのですが、Chromeで「\u26F9」がカラー絵文字になります。 これには複雑な理由がある様です。
全てを纏めた「Both-WH」のフィルター
以下が特異な絵文字を除外するフィルターパターンの完成形です。
パターンの9行目までは、先頭がサロゲートペアの文字コードのもの。 後の4行は、先頭がサロゲートペアでないものです。
〔注意〕
上枠の表記の外側の[]と内側の[]は意味が違います。
外側の [] は配列を意味し、配列の中の要素を「,」で区切っています。 また、後半にある内側の[]は、正規表現の「カッコの中のどれか」を意味し、その中の「-」は一連の範囲を意味します。 最後の「join('|');」メソッドは、この配列要素の全てを「or」で繋ぎ、1続きの正規表現のパターンにするものです。