Как запретить ввод определённых символов в 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;
}
Оно работает прекрасно идеально, даже можно копировать текст с запрещенными символами и оно их уберет и каретка откажется в конце скопированной подстроки где бы она не была.
