御幸備忘録

主にUnityに関してのブログです。

InputFieldから絵文字を除く方法

はじめに

InputField内に絵文字があると自動で取り除くスクリプトを作成しました。

絵文字とありますが、厳密にはサロゲート文字か判定してるだけなので全ての絵文字に対応してるわけではありません。

副次的に漢字の異字体等、他のサロゲートペアを使ったものにも対応してたりします。

スクリプト

using UnityEngine;
using UnityEngine.UI;

public class InputFieldController : MonoBehaviour
{
    [SerializeField] private InputField inputField = null;

    void Start()
    {
        inputField.onValueChanged.AddListener(delegate { OnValueChange(inputField); }); 
    }

    private void Reset()
    {
        inputField = GetComponent<InputField>();
    }

    private void OnValueChange(InputField inputField)
    {
        string str = string.Empty;

        foreach (var c in inputField.text)
        {
            if (!char.IsSurrogate(c))
            {
                str += c;
            }
        }

        inputField.text = str;
    }
}

使い方

上記をコピペcsファイルを作ってオブジェクトにアタッチするだけです。後はReset()が勝手にやってくれます。
後からInputFieldをアタッチした場合は歯車(設定)からResetを押すか手動でアタッチします。

終わりに

このスクリプトは、サーバ側に合わせてクライアント側から絵文字を入力・送信できなくする対応の過程で作りました。
絵文字そのものの対応は難しかったですが、サロゲート文字を除外することで取り敢えず解決したかなってとこです。