以下の内容はhttps://hacchi-man.hatenablog.com/entry/2025/04/07/220000より取得しました。


【Unity】TMP_InputValidatorの使い方

UnityのTextMeshPro(TMP)には、ユーザーの入力を制御するための便利な仕組みがあります。
そのひとつが TMP_InputValidator です。

TMP_InputValidatorとは?

TMP_InputValidator は、TMP_InputField に入力された各文字を検証し、入力を許可するかどうかを判定できる仕組みです。

TextMeshProでは、文字単位でバリデーションをかけたい場合、このValidatorを使うことで柔軟な入力制御が可能になります。

どう使うの?

TMP_InputValidator は抽象クラスなので、これを 継承して独自のバリデーションルールを実装します。
Unityエディタ上では ScriptableObject として扱うことができ、複数の入力フィールドで再利用も可能です。

サンプル:正規表現でルールを定義するValidator

正規表現Regex)を使ったバリデータが便利です。 例えば「アルファベット(小文字)のみ許可する」といったパターンも簡単に実装できます。

以下は正規表現を使った汎用的な TMP_InputValidator の例です。

using System.Text.RegularExpressions;
using TMPro;
using UnityEngine;

[CreateAssetMenu(fileName = "RegexValidator", menuName = "TMP Validators/Regex")]
public class RegexValidator : TMP_InputValidator
{
    [SerializeField]
    private string _pattern = @"[a-z]";
    
    private Regex _regex;

    private void OnEnable()
    {
        _regex = new Regex(_pattern);
    }

    public override char Validate(ref string text, ref int pos, char ch)
    {
        if (_regex.IsMatch(ch.ToString()))
        {
            text = text.Insert(pos, ch.ToString());
            pos++;
            return ch;
        }
        return '\0';
    }
}

使い方

上記のスクリプトを RegexValidator.cs として保存

Unityのエディタ上で右クリック → Create > TMP Validators > Regex を選んでアセットを作成

対象の TMP_InputField を選択し、Input Validator にこのアセットを設定

✅ 例:使える正規表現パターン集

パターン 説明
[a-z] 小文字アルファベットのみ許可
[A-Z0-9] 英大文字+数字
[\u3040-\u309F] ひらがなのみ(Unicode範囲)
[ぁ-んー] ひらがな+長音記号(ー)
[^0-9] 数字以外を許可(否定)

まとめ

TMP_InputValidator を使えば、ユーザーが入力できる文字を制御する強力な手段が手に入ります。 バリデーションを後からチェックするのではなく、入力そのものを制限することで、より直感的なUI/UXを実現できます。

プロジェクトに合わせた柔軟な入力制御にぜひ活用してみてください。




以上の内容はhttps://hacchi-man.hatenablog.com/entry/2025/04/07/220000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14