[AS3]AS3文本框限制字符实际仅输入指定个数字符(含中英文字符)
这个功能在很多地方都需要用到,会令人头疼的地方就是中英文夹杂的时候无法处理,下面是我自己通过google查询和自己编写的结果:
首先设置maxChars 这个属性,它控制文本框输入的字符长度,在as3中,一个中文和一个字母的长度都是1,但实际上一个中文是2个字节,1个英文是一个字节!
设置restrict = "a-zA-Z\u4e00-\u9fa5",这样是代表只能够输入大小写的英文字母和中文 ,以上设置可以保证文本的长度和合法性,但是无法达到 12个字符或6个中文(中英文夹杂) 的条件,所一下面我们再加上一步操作:
- //CuPlayer.com提示:获取字符串的字节数
- private function getStringBytesLength(str:String,charSet:String):int
- {
- var bytes:ByteArray = new ByteArray();
- bytes.writeMultiByte(str, charSet);
- bytes.position = 0;
- return bytes.length;
- }
给文本输入框加上一个事件:
- inputTxt.addEventListener(TextEvent.TEXT_INPUT, __nameInputEvent);
- rivate function __nameInputEvent(e:TextEvent):void
- {
- if((getStringBytesLength(__nameInput.text,"gb2312") +
- getStringBytesLength (e.text,'gb2312')) > __nameInput.maxChars)
- {
- e.preventDefault();
- return;
- }
- }
这样就完成了!上面是在flash ide 下可以实现的,但是在flex中,TextEvent.TEXT_INPUT 这个事件是不管用的,无法e.preventDefault();所以我继续查资料,然后通过下面的方法,在flex中实现了这个功能:
- //CuPlayer.com提示这是组件
- <s:TextInput x="100" y="65" id="txt_name" width="105" enabled="true" changing="__nameChangingEvent(event)"/>
- //这是需要设置的两个属性
- txt_name.restrict = "a-zA-Z\u4e00-\u9fa5";
- txt_name.maxChars = 12;
- //下面是用到的操作
- /**
- * CuPlayer.com提示姓名输入事件
- *
- */
- protected function __nameChangingEvent(event:TextOperationEvent):void
- {
- if((event.operation as InsertTextOperation)==null)
- {
- return;
- }
- var input:String=(event.operation as InsertTextOperation).text;
- if((__getStringBytesLength(txt_name.text,"gb2312") + __getStringBytesLength(input,'gb2312')) > txt_name.maxChars)
- {
- event.preventDefault();
- }
- }
- /**
- * CuPlayer.com提示获取该字符串的字节数
- */
- private function __getStringBytesLength(str:String,charSet:String):int
- {
- var bytes:ByteArray = new ByteArray();
- bytes.writeMultiByte(str, charSet);
- bytes.position = 0;
- return bytes.length;
- }
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例