加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

AS3文本输入框限制输入:12个字符或6个中文(中英文夹杂)

发布时间:2020-12-15 04:49:12 所属栏目:百科 来源:网络整理
导读:这个功能在很多地方都需要用到,会令人头疼的地方就是中英文夹杂的时候无法处理,下面是我自己通过google查询和自己编写的结果:?? ?? 首先设置maxChars?这个属性,它控制文本框输入的字符长度,在as3中,一个中文和一个字母的长度都是 1 ,但实际上一个中文
  1. 这个功能在很多地方都需要用到,会令人头疼的地方就是中英文夹杂的时候无法处理,下面是我自己通过google查询和自己编写的结果:??
  2. ??
  3. 首先设置maxChars?这个属性,它控制文本框输入的字符长度,在as3中,一个中文和一个字母的长度都是1,但实际上一个中文是2个字节,1个英文是一个字节!??
  4. 设置restrict?=?"a-zA-Zu4e00-u9fa5",这样是代表只能够输入大小写的英文字母和中文??
  5. 以上设置可以保证文本的长度和合法性,但是无法达到?12个字符或6个中文(中英文夹杂)?的条件,所一下面我们再加上一步操作:??
  6. //获取字符串的字节数??
  7. private?function?getStringBytesLength(str:String,charSet:String):int??
  8. ???{??
  9. ?????
  10. ????var?bytes:ByteArray?=?new?ByteArray();??
  11. ????bytes.writeMultiByte(str,?charSet);??
  12. ????bytes.position?=?0;??
  13. ????return?bytes.length;??
  14. ???}??
  15. 给文本输入框加上一个事件:??
  16. inputTxt.addEventListener(TextEvent.TEXT_INPUT,?__nameInputEvent);??
  17. private?function?__nameInputEvent(e:TextEvent):void??
  18. ??????if((getStringBytesLength(__nameInput.text,"gb2312")?+??
  19. ????????????getStringBytesLength????(e.text,'gb2312'))?>?__nameInput.maxChars)??
  20. ??????{??
  21. ?????????e.preventDefault();??
  22. ???????return;???
  23. ????}??
  24. 这样就完成了!上面是在flash?ide?下可以实现的,但是在flex中,TextEvent.TEXT_INPUT?这个事件是不管用的,无法e.preventDefault();所以我继续查资料,然后通过下面的方法,在flex中实现了这个功能:??
  25. //这是组件??
  26. <s:TextInput?x="100"?y="65"?id="txt_name"?width="105"?enabled="true"?changing="__nameChangingEvent(event)"/>??
  27. //这是需要设置的两个属性??
  28. txt_name.restrict?=?"a-zA-Zu4e00-u9fa5";??
  29. txt_name.maxChars?=?12;??
  30. //下面是用到的操作??
  31. /**?
  32. ????*?姓名输入事件?
  33. ????*??
  34. ????*/???
  35. protected?function?__nameChangingEvent(event:TextOperationEvent): ????{??
  36. ?????if((event.operation?as?InsertTextOperation)==null)??
  37. ?????{??
  38. return;??
  39. ?????}??
  40. ??????
  41. ?????var?input:String=(event.operation?as?InsertTextOperation).text;??
  42. if((__getStringBytesLength(txt_name.text,"gb2312")?+?__getStringBytesLength(input,'gb2312'))?>?txt_name.maxChars)??
  43. ??????event.preventDefault();??
  44. ????????*?获取该字符串的字节数??
  45. private?function?__getStringBytesLength(str:String,250); line-height:18px"> ?????var?bytes:ByteArray?=? ?????bytes.writeMultiByte(str,250); line-height:18px"> ?????bytes.position?=? ????} ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读