·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]AS3文本框限制字符实际仅输入指定个数字符(含中英文字符)

时间:2013-12-31 09:28cuplayer.com
这个功能在很多地方都需要用到,会令人头疼的地方就是中英文夹杂的时候无法处理,下面是我自己通过google查询和自己编写的结果AS3文本输入框限制输入:12个字符或6个中文(中英文夹杂)

这个功能在很多地方都需要用到,会令人头疼的地方就是中英文夹杂的时候无法处理,下面是我自己通过google查询和自己编写的结果:
首先设置maxChars 这个属性,它控制文本框输入的字符长度,在as3中,一个中文和一个字母的长度都是1,但实际上一个中文是2个字节,1个英文是一个字节!
设置restrict = "a-zA-Z\u4e00-\u9fa5",这样是代表只能够输入大小写的英文字母和中文 ,以上设置可以保证文本的长度和合法性,但是无法达到 12个字符或6个中文(中英文夹杂) 的条件,所一下面我们再加上一步操作:

  1. //CuPlayer.com提示:获取字符串的字节数   
  2. private function getStringBytesLength(str:String,charSet:String):int   
  3.    {   
  4.     var bytes:ByteArray = new ByteArray();   
  5.     bytes.writeMultiByte(str, charSet);   
  6.     bytes.position = 0;   
  7.     return bytes.length;   
  8.    }   

给文本输入框加上一个事件: 

  1. inputTxt.addEventListener(TextEvent.TEXT_INPUT, __nameInputEvent);   
  2. rivate function __nameInputEvent(e:TextEvent):void   
  3.   {   
  4.      if((getStringBytesLength(__nameInput.text,"gb2312") +   
  5.   
  6.            getStringBytesLength    (e.text,'gb2312')) > __nameInput.maxChars)   
  7.      {   
  8.         e.preventDefault();   
  9.       return;    
  10.    }   
  11.   }   

这样就完成了!上面是在flash ide 下可以实现的,但是在flex中,TextEvent.TEXT_INPUT 这个事件是不管用的,无法e.preventDefault();所以我继续查资料,然后通过下面的方法,在flex中实现了这个功能:

  1.  //CuPlayer.com提示这是组件   
  2. <s:TextInput x="100" y="65" id="txt_name" width="105" enabled="true" changing="__nameChangingEvent(event)"/>   
  3. //这是需要设置的两个属性   
  4. txt_name.restrict = "a-zA-Z\u4e00-\u9fa5";   
  5. txt_name.maxChars = 12;   
  6.    
  7. //下面是用到的操作   
  8.    
  9. /**  
  10.     * CuPlayer.com提示姓名输入事件  
  11.     *   
  12.     */    
  13.     protected function __nameChangingEvent(event:TextOperationEvent):void   
  14.     {   
  15.      if((event.operation as InsertTextOperation)==null)   
  16.      {   
  17.       return;   
  18.      }   
  19.        
  20.      var input:String=(event.operation as InsertTextOperation).text;   
  21.        
  22.      if((__getStringBytesLength(txt_name.text,"gb2312") + __getStringBytesLength(input,'gb2312')) > txt_name.maxChars)   
  23.      {   
  24.       event.preventDefault();   
  25.      }   
  26.     }   
  27.     /**  
  28.     * CuPlayer.com提示获取该字符串的字节数   
  29.     */    
  30.     private function __getStringBytesLength(str:String,charSet:String):int   
  31.     {   
  32.      var bytes:ByteArray = new ByteArray();   
  33.        
  34.      bytes.writeMultiByte(str, charSet);   
  35.        
  36.      bytes.position = 0;   
  37.      return bytes.length;   
  38.        
  39.     }   

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器