unity-UIInput自定义限制输入字符

UIInput组件如下图所示

UIInput可以用于创建输入框,它自带6种限制方式,如下图所示

最后一种Alphabet Int Chinese是我自定义的,用于限制输入字母,数字,汉字,比如昵称,就可以使用这种设定

自定义限制输入需要修改UIInput的代码

首先,找到Validation这个属性

 1 public enum Validation
 2     {
 3         None,
 4         Integer,
 5         Float,
 6         Alphanumeric,
 7         Username,
 8         Name,
 9         AlphabetIntChinese,        // 自定义
10     }

在其中加入我们自定义类型的名字,我这里加的是AlphabetIntChinese
找到Validate这个函数

 1 protected char Validate (string text, int pos, char ch)
 2     {
 3         // Validation is disabled
 4         if (validation == Validation.None || !enabled) return ch;
 5
 6         if (validation == Validation.Integer)
 7         {
 8             // Integer number validation
 9             if (ch >= ‘0‘ && ch <= ‘9‘) return ch;
10             if (ch == ‘-‘ && pos == 0 && !text.Contains("-")) return ch;
11         }
12         else if (validation == Validation.Float)
13         {
14             // Floating-point number
15             if (ch >= ‘0‘ && ch <= ‘9‘) return ch;
16             if (ch == ‘-‘ && pos == 0 && !text.Contains("-")) return ch;
17             if (ch == ‘.‘ && !text.Contains(".")) return ch;
18         }
19         else if (validation == Validation.Alphanumeric)
20         {
21             // All alphanumeric characters
22             if (ch >= ‘A‘ && ch <= ‘Z‘) return ch;
23             if (ch >= ‘a‘ && ch <= ‘z‘) return ch;
24             if (ch >= ‘0‘ && ch <= ‘9‘) return ch;
25         }
26         else if (validation == Validation.Username)
27         {
28             // Lowercase and numbers
29             if (ch >= ‘A‘ && ch <= ‘Z‘) return (char)(ch - ‘A‘ + ‘a‘);
30             if (ch >= ‘a‘ && ch <= ‘z‘) return ch;
31             if (ch >= ‘0‘ && ch <= ‘9‘) return ch;
32         }
33         else if (validation == Validation.Name)
34         {
35             char lastChar = (text.Length > 0) ? text[Mathf.Clamp(pos, 0, text.Length - 1)] : ‘ ‘;
36             char nextChar = (text.Length > 0) ? text[Mathf.Clamp(pos + 1, 0, text.Length - 1)] : ‘\n‘;
37
38             if (ch >= ‘a‘ && ch <= ‘z‘)
39             {
40                 // Space followed by a letter -- make sure it‘s capitalized
41                 if (lastChar == ‘ ‘) return (char)(ch - ‘a‘ + ‘A‘);
42                 return ch;
43             }
44             else if (ch >= ‘A‘ && ch <= ‘Z‘)
45             {
46                 // Uppercase letters are only allowed after spaces (and apostrophes)
47                 if (lastChar != ‘ ‘ && lastChar != ‘\‘‘) return (char)(ch - ‘A‘ + ‘a‘);
48                 return ch;
49             }
50             else if (ch == ‘\‘‘)
51             {
52                 // Don‘t allow more than one apostrophe
53                 if (lastChar != ‘ ‘ && lastChar != ‘\‘‘ && nextChar != ‘\‘‘ && !text.Contains("‘")) return ch;
54             }
55             else if (ch == ‘ ‘)
56             {
57                 // Don‘t allow more than one space in a row
58                 if (lastChar != ‘ ‘ && lastChar != ‘\‘‘ && nextChar != ‘ ‘ && nextChar != ‘\‘‘) return ch;
59             }
60         }
61         //自定义,只允许输入字母数字汉字
62         else if (validation == Validation.AlphabetIntChinese)
63         {
64             if (ch>=0x4e00 && ch<=0x9fa5) return ch;//这个主要是汉字的范围
65             if (ch >= ‘A‘ && ch <= ‘Z‘) return ch;
66             if (ch >= ‘a‘ && ch <= ‘z‘) return ch;
67             if (ch >= ‘0‘ && ch <= ‘9‘) return ch;
68         }
69         return (char)0;
70     }

在函数最后加上我们所需的类型即可

也可以从此函数中看出,原设类型都是哪种限制

以上做好后,在UIInput组件中Validate属性选择我们自定义的属性即可

时间: 2024-11-05 21:50:05

unity-UIInput自定义限制输入字符的相关文章

c语言:用fgetc函数从键盘逐个输入字符,用fputc函数写到磁盘文件

用fgetc函数从键盘逐个输入字符,用fputc函数写到磁盘文件. 解:程序: #include<stdio.h> #include<stdlib.h>//exit使程序终止 int main() { FILE* fp; char ch, filename[10]; printf("请输入所用的文件名:"); scanf("%s", &filename); if ((fp = fopen(filename, "w"

常用输入字符流Reader

Reader是用于输入字符数据的,它所根据的 方法跟InputStream基本一样.它是所有输入字符流的抽象父类,因此不能直接构建Reader的实例,必须通过它的子类来构建.以下是几个常用的子类: 1.字符数组作为输入源--CharArrayReader CharArrayReader包含一个内部缓冲区,该缓冲区包括从流中读取的字符数组.所谓内存缓存区,就是对应了内存中存在的字符数组,因此可以根据字符数组来创建该类的实例.它有以下两个构造函数: CharArrayReader(char[] bu

Unity Android设备的输入

Unity Android设备的输入 1依据屏幕位置输入 有的时候也许是为了整个有些风格的干净,减少屏幕上的UI图标,以至于摒弃了虚拟按键这种常用的输入方式.为了替代虚拟按键的输入方式而选择了依据点击事件发生在屏幕中的位置而控制对象的移动等.比如将整个手机屏幕划分为左右两个区域,左边区域负责移动控制,右边区域负责技能释放. 这里我们需要处理的问题分别是点击事件的获取及屏幕信息的获取,下面这两个方面的API文档. 点击事件:http://wiki.ceeger.com/script/unityen

JS(javascript)动态判断输入文本框剩余可输入字符数

一.描述 我们在空间中发表状态,当我们输入一个字符,上面的剩余可输入字符数就会减一,直到输入的字符数达到之前设定的最大数量为止,效果如下图所示: 二.实现方法 首先,我们先确定文本框内的最大可输入长度,其次在输入一个字符抬起键盘的时候对输入文本框中的字符长度进行验证,并在动态显示在剩余可输入字符数中. 三.源代码 <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="

UItexfile实时验证输入字符

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; { NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; UITextField *loginPas

android 中如何限制 EditText 最大输入字符数

方法一: 在 xml 文件中设置文本编辑框属性作字符数限制 如:android:maxLength="10" 即限制最大输入字符个数为10 方法二: 在代码中使用InputFilter 进行过滤 //editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); 即限定最大输入字符数为20 [java] view plaincopy public class TextEditActivity exten

实时统计输入字符个数

JavaScript中经常要实时统计输入的个数,用onkeyup只对输入英文有效果,输入中文时没办法实时统计:而使用onchange,也只能是等输入框失去焦点才能统计,并不能实时.下面的方法就可以实现实时统计: <div id="msg"></div> <input id='txt' value="" /> <script> //当状态改变的时候执行的函数 function handle() { document.ge

不在同一程序内,如何在光标处(当前有焦点的窗体输入框)输入字符

因测试一个程序,该程序的安卓端执行扫描条码二维码操作,然后服务器端需要在PC当前处于激活状态的窗体的当前光标处显示安卓程序扫描到的条形码.这是博主“小李飞菜刀”的扫描宝服务程序.场景就是苦于手边没有扫描枪,又想测试条码扫描.“小李飞菜刀”同学使用的是 "SendKeys"的“Send”方法.这是同一应用才能有效的办法.如果需要在其他应用的光标处输入字符,就只有使用"SendMessage"的windows api了.经过一番搜索,抄到段代码,测试了一下没有效果,TN

Xbox One:使用手机向Xbox One输入字符

有时你需要向Xbox One中输入字符,如兑换码.存储名称-- 你可以使用Xbox One SmartGlass应用,向Xbox One快速输入信息,而不用使用手柄的上下左右键,逐个字符进行输入.你可以在不同设备平台下载Xbox One SmartGlass,我使用的是Windows Phone 8版本(下图) 在Xbox One SmartGlass应用输入的信息,会在Xbox One主机界面同步显示.