You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中TextMeshPro输入框Trim后长度仍为1的问题求助

解决TextMeshProUGUI输入框清空后仍有不可见字符的问题

问题分析

常规的Trim()方法仅能清除空格、换行、制表符等常见空白字符,但你遇到的不可见字符大概率是Unicode特殊空白/控制字符(比如零宽空格U+200B、非断空格U+00A0),这类字符不在Trim()的默认处理范围内,所以调用后仍会残留。

排查步骤

先定位具体是哪种字符,在代码里添加Debug输出字符的Unicode编码:

public class MainMenuController : MonoBehaviour
{
    public TextMeshProUGUI codeInput;

    private void Start()
    {
        string rawText = codeInput.text;
        Debug.Log($"原始文本长度:{rawText.Length}");
        if (rawText.Length > 0)
        {
            // 输出第一个字符的Unicode编码,方便定位问题
            Debug.Log($"字符编码:{(int)rawText[0]}");
        }
        string trimmedText = rawText.Trim();
        Debug.Log($"Trim后长度:{trimmedText.Length}");
    }
}

根据输出的编码对应字符:比如8203对应零宽空格U+200B,160对应非断空格U+00A0。

解决方案

1. 针对性清除特定字符

如果已经确定是某类特殊字符,直接用Replace()清除:

private void Start()
{
    // 示例:清除零宽空格+常规Trim
    string cleanedText = codeInput.text.Replace("\u200B", "").Trim();
    Debug.Log(cleanedText.Length);
}

如果是多种特殊字符,可叠加Replace():

string cleanedText = codeInput.text.Replace("\u200B", "")
                                  .Replace("\u00A0", "")
                                  .Trim();

2. 正则表达式过滤所有控制/不可见字符

若不确定具体字符,用正则过滤所有Unicode控制字符和不可见空白:

using System.Text.RegularExpressions;

public class MainMenuController : MonoBehaviour
{
    public TextMeshProUGUI codeInput;

    private void Start()
    {
        // \p{C}匹配所有Unicode控制字符(包括不可见空白)
        string cleanedText = Regex.Replace(codeInput.text, @"\p{C}+", "").Trim();
        Debug.Log(cleanedText.Length);
    }
}

3. 检查输入框Inspector设置

  • 直接在Inspector的Text字段选中内容,按Delete彻底清空,避免残留不可见字符;
  • 排查是否有其他脚本在Start()/Awake()阶段修改了输入框的text属性;
  • 检查Text Input Settings里的默认配置,确认没有自动填充特殊字符。

内容的提问来源于stack exchange,提问作者Axiyom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:43:23