Unity之TMP_InputField-输入字符数限制

news/2024/11/29 11:52:51/

文章目录

  • 前言
  • 思路
  • 代码
  • 工程项目


前言

我们在开发过程中遇到需要使用输入框的情况,输入框要做字符数限制,很便捷的InputField检视面板会有公开的字符数限制调节。但是你会发现,无论是英文字符还是中文字符,它都是一视同仁的,这就很难受了,因为从展示上,中英文的位宽是不一样的,我们需要英文字符数显示的多一些,中文字符数少一些。下面就来解决这个问题。
在这里插入图片描述

思路

我们知道英文字符在UTF-8的模式下只占1个字符,中文占2-5个字符,还有其它各类字符,我们这里主要考虑中英文, 通常来讲,我们可以限制一下输入内容的总字符数,比如限制为12个,将输入的内容进行UTF-8的转换,“aaa哈哈哈” ,总字符数为12个,哈 占3个。不过这样还有点问题,12个字符,中文只能输入4个。

abcdabcdabcd     12个字符
你好呀哈          12个字符
你好呀哈你好

很明显这样展示出来也不合理,所以我们需要把中文:英文的字数按1:2进行限制。

代码


using TMPro;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 中文字符数转变为2
/// </summary>
[RequireComponent(typeof(TMP_InputField))]
public class CharNumTransf : MonoBehaviour
{private TMP_InputField inputField;[Header("最大字数")]//英文算1个,中文算2个public int MaxLimit = 16;private void Awake(){InputFieldif (inputField == null){inputField = GetComponent<TMP_InputField>();}}void Start(){inputField.onValidateInput = _OnValidateInput;}char _OnValidateInput(string text, int charIndex, char addedChar){if (GetTransCharNum(text) + GetTransCharNum(addedChar.ToString()) > MaxLimit){return '\0'; //返回空}return addedChar;}/// <summary>/// 字符串统计/// </summary>/// <param name="text"></param>/// <returns></returns>int GetTransCharNum(string text){int totalNum = 0;char[] alrText = text.ToCharArray();foreach (var item in alrText){totalNum += SingleCharTrans(item);}return totalNum;}/// <summary>/// 单个字符判断/// </summary>/// <param name="singChar"></param>/// <returns></returns>int SingleCharTrans(char singChar){int leng = System.Text.Encoding.UTF8.GetBytes(singChar.ToString()).Length;if (leng >= 2){leng = 2;}return leng;}
}

工程项目

链接:https://pan.baidu.com/s/1Rar1pSsgwK_aCh2SuHqVrQ
提取码:t8wq


http://www.ppmy.cn/news/487255.html

相关文章

input输入框按照字符数限制输入

实现效果&#xff1a;按照字符数限制用户输入长度&#xff0c;汉字为两个字符&#xff0c;数字和字母为一个字符&#xff0c;超出字符长度限制时&#xff0c;自动去掉多余部分来限制用户输入。 第一种实现方式&#xff0c;自定义指令&#xff08;update存在不及时调用的情况&a…

vue获取字符串中字符的的数量_结合Vue控制字符和字节的显示个数

需求 需求&#xff1a;结合Vue实现下面的效果 输入框中最多输入16个字符 汉字最多显示5个&#xff0c;超出部分以...显示 英文最多显示10个&#xff0c;超出部分以...显示 实现 搭建简单页面&#xff0c;并设置简单样式 在正式开始写核心代码之前&#xff0c;要先把代码结构搭建…

linux统计文件单词数,Linux怎么统计文本的的行数/单词数和字符数?

Linux系统中想要统计文本的行数、单词和字符数量&#xff0c;该怎么统计呢&#xff1f;我们可以使用SecureCRT来统计&#xff0c;下面我们就来看看详细的教程。 1、启动Linux系统&#xff0c;用SecureCRT(或者其他的ssh工具&#xff0c;如xshell等)连上Linux系统。也可以在Linu…

统计字符串中每个字符的出现字数

package cn.itcast_03;import java.util.Scanner; import java.util.Set; import java.util.TreeMap;/** 统计字符串中每个字符的出现字数* * 分析&#xff1a;* A&#xff1a;定义一个字符串&#xff08;可以改进为键盘录入&#xff09;* B&#xff1a;定义一个TreeMa…

Eclipse设置每行的最大字符数

Eclipse默认宽度是 120 个字符。如下图所示&#xff08;提示&#xff1a;格式化快捷键Ctrl Shift F&#xff09;&#xff1a; 设置步骤如下&#xff1a; 菜单栏倒数第二项&#xff0c;选择Window下拉栏最后一项&#xff0c;选择Preferences左侧导航栏第八项&#xff0c;选择…

golang统计字符串字数

golang 可以使用正则和 unicode 包的方法判断。 以下函数 GetStrLength 返回输入的字符串的字数&#xff0c;每个汉字和中文标点算 1 个字数&#xff0c;英文和其他字符算半个字数&#xff0c;不足 1 个字算 1 个。 // GetStrLength 返回输入的字符串的字数&#xff0c;汉字和…

字节数与字符数mysql_数据库字段长短之字节与字符

以下部分摘抄于网络&#xff0c;请知悉 1、字符&#xff1a;常见的1、2、A、a、&#xffe5;、*、&#xff1f;、国、#等符号都叫做字符&#xff1b; 2、字节&#xff1a;存储容量的单位Byte(B)&#xff0c;一个字节是8个bit(b)。 根据字符集、编码方式的不同&#xff0c;不同的…

python按位数分割字符串_按位置拆分字符串

我们知道anchors、word boundaries和{}在某个位置匹配,而不是匹配字符。 是否可以使用regex(特别是python)通过前面的一种方法拆分字符串?在 例如,考虑以下字符串:"ThisisAtestForchEck,Match IngwithPosition." 因此,我需要以下结果(以大写字母开头但不以空格开…