Как запретить ввод определённых символов в TMPro

Есть импутфилд от TextMeshPro. Вопрос в том как ограничить ввод чтоб можно было вводить все кроме определённого списка символов, в основном которые запрещены в имени файла в винде(/ \ * ? @ ну и там целый список у меня).


Ответы (2 шт):

Автор решения: Kurwo Attano

Решение я придумал такое:

public static readonly char[] ForbiddenChars = new char[] 
    { '\\', '/', '|', '<', '>', ':', ';', '.', '"', '*', '?', '!', '%', '@', '\0' };

[SerializeField] protected TMP_InputField InputField_TMP;

public void OnInputFieldEdit()
{
    string oldText = inst.InputField_TMP.text;
    int pos = InputField_TMP.stringPosition;

    /// If the caret in not at the beginning
    /// and entered char is forbidden, then return caret 
    if (pos > 0 && Array.IndexOf(ForbiddenChars, oldText[pos - 1]) >= 0)
        inst.InputField_TMP.stringPosition--;
    
    /// Delete all forbidden chars
    string text = string.Concat(oldText.Where(c => Array.IndexOf(SavesHandler.SaveName_ForbiddenChars, c) < 0));

    /// Return text
    if (text.Length != oldText.Length)
        inst.InputField_TMP.text = text;
}

Оно работает прекрасно идеально, даже можно копировать текст с запрещенными символами и оно их уберет и каретка откажется в конце скопированной подстроки где бы она не была.

→ Ссылка
Автор решения: Sindy Pinn

Попробуй в Input Field Settings выставить для поля Content Type значение Alphanumeric введите сюда описание изображения

→ Ссылка