js中文长度校验以及字节

来源:互联网 发布:淘宝评价顺序能调吗 编辑:程序博客网 时间:2024/06/05 22:47
   单字节指只占一个字,是英文字符。双字是占两个字节的,中文字符都占两个字节 单字节的英文是Byte;比特是最小的数值单位,它的英文是Bit。    一个字节包含8个比特,通常计算机初学者接触到的ASCII码就是单字节字符,由于计算机是二进制的,1个比特位只可以表示为0或者1这两种数,那8个比特(一般从右至左)就可以有0~127(2的8次方再减1)的不同的数值表示。    双字节字符即是包含了两个字节共16比特。    一般比较好理解的就是:英文字母属于单字节字符,而汉字则属于双字节字符。因为英文字母、数字、符号等完全可以用128种不同的数值来表示,而汉字太多则不能,所以才需要扩展到双字节。

      因此判断汉字的方法就简单了,只需要判断是不是单字节:

( c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f))  或者   c  小于256 

或者判断双字节  c  大于256 

mootools中有长度校验的方法,如下:

lengthnewnumchn:function(el,min, max){
  var v=el.get('value');
  var w = 0;
  if(v == "") return true;
  var max1=Math.floor(max/3);
  for (var i=0; i<v.length; i++) {
    var c = v.charCodeAt(i);
    //单字节加1
    if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)) {
     w++;
    }
    else { //汉字加3
     w+=3;
    }
  }
  
  if (w > max || w<min) { 
    el.errors.push(this.options.alerts.lengthchnnum.replace("%1",min).replace("%2",max).replace("%1",min).replace("%3",max1));
    return false;
  }
   }

也可以如下:

//汉字及英文,数字长度校验
 lengthnumchn:function(el,min,max){
        var v = el.get('value');
  if(v == "") return true;
  var len = 0 ;
  var max1 = Math.floor(max/2);
  for (var i = 0; i < v.length; i++) {
            var c = v.charCodeAt(i) > 255 ? 2 : 1;
            len += c;
        }
  if(len < min || len > max) {
   el.errors.push(this.options.alerts.lengthchnnum.replace("%1",min).replace("%2",max).replace("%1",min).replace("%3",max1));
   return false;
  }
 }

 

     对应数据库汉字占用几个字节,执行下面的sql即可看到 :

SELECT lengthb('的')FROM DUAL ;

 

 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]