AS3文本输入框限制输入:12个字符或6个中文(中英文夹杂)
- 这个功能在很多地方都需要用到,会令人头疼的地方就是中英文夹杂的时候无法处理,下面是我自己通过google查询和自己编写的结果:??
- ??
- 首先设置maxChars?这个属性,它控制文本框输入的字符长度,在as3中,一个中文和一个字母的长度都是1,但实际上一个中文是2个字节,1个英文是一个字节!??
- ??
- 设置restrict?=?"a-zA-Z\u4e00-\u9fa5",这样是代表只能够输入大小写的英文字母和中文??
- ??
- 以上设置可以保证文本的长度和合法性,但是无法达到?12个字符或6个中文(中英文夹杂)?的条件,所一下面我们再加上一步操作:??
- ??
- ??
- ??
- 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);??
- ??
- private?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中实现了这个功能:??
- ??
- ??
- ??
- <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;??
- ??
- ??
- ??
- ?
- ?
- ?
- ???
- ????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();??
- ?????}??
- ????}??
- ?????
- ?????
- ?????
- ?
- ???
- ????private?function?__getStringBytesLength(str:String,charSet:String):int??
- ????{??
- ?????var?bytes:ByteArray?=?new?ByteArray();??
- ??????
- ?????bytes.writeMultiByte(str,?charSet);??
- ??????
- ?????bytes.position?=?0;??
- ?????return?bytes.length;??
- ??????
- ????} ?
??转自http://cloud21.iteye.com/blog/745749