NGUI UIInput屏蔽特殊字符(允许输入汉字)

原创 2013年10月25日 19:35:23

2014/12/29更新:

现在的新版本已经找不到UIInputValidator这个脚本了,官方直接把功能集成到了UIInput里面,大家可以编辑UIInput达到相同的目的,对应修改UIInput的Validation属性即可。

-----------------------------------------------------------------------------------------------------------------------

可以用组件UIInputValidator达到预期效果,不过为了支持汉字输入,需做一定的修改

修改UIInpurtValidator的代码如下:


首先是在枚举Validation里添加一种过滤规则

public enum Validation
{
<span style="white-space:pre">	</span>None,
	Integer,
	Float,
	Alphanumeric,
	Username,
	Name,
	<span style="color:#ff0000">Chinese,//这个是新添加的</span>
}

然后修改Validate方法如下

char Validate (string text, char ch)
{
	// Validation is disabled
	if (logic == Validation.None || !enabled) return ch;
	<span style="color:#ff0000">if (logic == Validation.Chinese){
		if (ch>=0x4e00 && ch<=0x9fa5) return ch;//这个主要是汉字的范围
		if (ch >= 'A' && ch <= 'Z') return ch;
		if (ch >= 'a' && ch <= 'z') return ch;
		if (ch >= '0' && ch <= '9') return ch;
	}
	else</span> if (logic == Validation.Integer)
	{
		// Integer number validation
		if (ch >= '0' && ch <= '9') return ch;
		if (ch == '-' && text.Length == 0) return ch;
	}
	else if (logic == Validation.Float)
	{
		// Floating-point number
		if (ch >= '0' && ch <= '9') return ch;
		if (ch == '-' && text.Length == 0) return ch;
		if (ch == '.' && !text.Contains(".")) return ch;
	}
	else if (logic == Validation.Alphanumeric)
	{
		// All alphanumeric characters
		if (ch >= 'A' && ch <= 'Z') return ch;
		if (ch >= 'a' && ch <= 'z') return ch;
		if (ch >= '0' && ch <= '9') return ch;
	}
	else if (logic == Validation.Username)
	{
		// Lowercase and numbers
		if (ch >= 'A' && ch <= 'Z') return (char)(ch - 'A' + 'a');
		if (ch >= 'a' && ch <= 'z') return ch;
		if (ch >= '0' && ch <= '9') return ch;
	}
	else if (logic == Validation.Name)
	{
		char lastChar = (text.Length > 0) ? text[text.Length - 1] : ' ';
		if (ch >= 'a' && ch <= 'z')
		{
			// Space followed by a letter -- make sure it's capitalized
			if (lastChar == ' ') return (char)(ch - 'a' + 'A');
			return ch;
		}
		else if (ch >= 'A' && ch <= 'Z')
		{
			// Uppercase letters are only allowed after spaces (and apostrophes)
			if (lastChar != ' ' && lastChar != '\'') return (char)(ch - 'A' + 'a');
			return ch;
		}
		else if (ch == '\'')
		{
			// Don't allow more than one apostrophe
			if (lastChar != ' ' && lastChar != '\'' && !text.Contains("'")) return ch;
		}
		else if (ch == ' ')
		{
			// Don't allow more than one space in a row
			if (lastChar != ' ' && lastChar != '\'') return ch;
		}
	}
	return (char)0;
}

红色部分为新添加的代码,这样子就可以在u3d编辑器里设置logic的值为Chinese就可以了
如果有需求需要允许一些特殊字符,直接修改Validate方法就可以了




相关文章推荐

NGUI 3.5教程(七)Input 输入框

 写在前面:        本文将创建一个基本的Button。并且编写脚本,响应点击事件。     欢迎大家纠错、拍砖!原创很辛苦,如有转载,请注明出处。...

NGUI的Input输入框限制中文字节数问题

转载自: 一般来说,昵称等用户输入的自定义数据都需要限制一下显示的长度。 NGUI的INPUT输入框限制的是最大的char字符数,char字符数其实就是string的长度,...

ngui UIInput输入汉字的那些坑

项目使用ngui,制作角色创建时,及聊天系统时,难免会输入中文字符。结果发现了很奇妙的情况,即限制的长度6(角色名长度)时,在editor中只能输入三个汉字,但是直接设置值可以显示6个汉字。查了下,发...

Unity3D NGUI UIInput制作输入框屏蔽特殊字符(只允许输入正整数)

1、首先看看使用NGUI插件创建一个简单输入文本框效果:。 2、这个简单的输入文本框需要一个label标签作为显示,一个背景图片以及输入UIInput脚本。我们看看unity的输入文本框的节点图 ...

unity3d 5 InputField 非法路径文件名字符 输入过滤

void Start() { if (this.Button == null) { this.Button = this.GetComponentInChild...

《游戏脚本的设计与开发》-(RPG部分)3.7 战斗系统之自动战斗(一)

所谓自动战斗系统就是战斗从开始到结束无需任何操作,其实自动战斗的胜负结果在战斗开始的时候已经决定了,战斗的画面只是还用来显示或者说回放这一战斗的过程,这种战斗方式开发成本较低,而且因为不用长时间的操作...

Unity3D中的弹道和移动目标提前量计算

弹道计算是游戏里常见的问题,其中关于击中移动目标的自动计算提前量的话题,看似简单,其实还是挺复杂的数学。网上这方面的资料还真不多,而且都是写的含含糊糊。抽空总结一下自己的方法。 讨论的前提是...

URL中的汉字和特殊字符编码,以及ASIHTTPRequest对此的处理

URL中的汉字和特殊字符编码,以及ASIHTTPRequest对此的处理 ①URL编码 需要对URL参数中的特殊字符和汉字进行编码处理,参数名一般不会出现汉字或特殊字符,所以一般是对参数值进行编码...

特殊字符输入器

  • 2012年06月07日 10:59
  • 254KB
  • 下载

android 过滤输入法特殊字符

  • 2017年01月03日 14:06
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NGUI UIInput屏蔽特殊字符(允许输入汉字)
举报原因:
原因补充:

(最多只允许输入30个字)