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

  1. 这个功能在很多地方都需要用到,会令人头疼的地方就是中英文夹杂的时候无法处理,下面是我自己通过google查询和自己编写的结果:  
  2.   
  3. 首先设置maxChars 这个属性,它控制文本框输入的字符长度,在as3中,一个中文和一个字母的长度都是1,但实际上一个中文是2个字节,1个英文是一个字节!  
  4.   
  5. 设置restrict = "a-zA-Z\u4e00-\u9fa5",这样是代表只能够输入大小写的英文字母和中文  
  6.   
  7. 以上设置可以保证文本的长度和合法性,但是无法达到 12个字符或6个中文(中英文夹杂) 的条件,所一下面我们再加上一步操作:  
  8.   
  9. //获取字符串的字节数  
  10.   
  11. private function getStringBytesLength(str:String,charSet:String):int  
  12.    {  
  13.      
  14.     var bytes:ByteArray = new ByteArray();  
  15.      
  16.     bytes.writeMultiByte(str, charSet);  
  17.      
  18.     bytes.position = 0;  
  19.      
  20.     return bytes.length;  
  21.      
  22.    }  
  23.   
  24. 给文本输入框加上一个事件:  
  25.   
  26. inputTxt.addEventListener(TextEvent.TEXT_INPUT, __nameInputEvent);  
  27.   
  28. private function __nameInputEvent(e:TextEvent):void  
  29.    {  
  30.      
  31.       if((getStringBytesLength(__nameInput.text,"gb2312") +  
  32.   
  33.             getStringBytesLength    (e.text,'gb2312')) > __nameInput.maxChars)  
  34.       {  
  35.          e.preventDefault();  
  36.        return;   
  37.     }  
  38.    }  
  39.   
  40. 这样就完成了!上面是在flash ide 下可以实现的,但是在flex中,TextEvent.TEXT_INPUT 这个事件是不管用的,无法e.preventDefault();所以我继续查资料,然后通过下面的方法,在flex中实现了这个功能:  
  41.   
  42. //这是组件  
  43.   
  44. <s:TextInput x="100" y="65" id="txt_name" width="105" enabled="true" changing="__nameChangingEvent(event)"/>  
  45.   
  46. //这是需要设置的两个属性  
  47.   
  48. txt_name.restrict = "a-zA-Z\u4e00-\u9fa5";  
  49. txt_name.maxChars = 12;  
  50.   
  51. //下面是用到的操作  
  52.   
  53. /** 
  54.     * 姓名输入事件 
  55.     *  
  56.     */   
  57.     protected function __nameChangingEvent(event:TextOperationEvent):void  
  58.     {  
  59.      if((event.operation as InsertTextOperation)==null)  
  60.      {  
  61.       return;  
  62.      }  
  63.       
  64.      var input:String=(event.operation as InsertTextOperation).text;  
  65.       
  66.      if((__getStringBytesLength(txt_name.text,"gb2312") + __getStringBytesLength(input,'gb2312')) > txt_name.maxChars)  
  67.      {  
  68.       event.preventDefault();  
  69.      }  
  70.     }  
  71.      
  72.      
  73.     /** 
  74.     * 获取该字符串的字节数  
  75.     */   
  76.     private function __getStringBytesLength(str:String,charSet:String):int  
  77.     {  
  78.      var bytes:ByteArray = new ByteArray();  
  79.       
  80.      bytes.writeMultiByte(str, charSet);  
  81.       
  82.      bytes.position = 0;  
  83.      return bytes.length;  
  84.       
  85.     }  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值