1. 程式人生 > >js中文長度校驗以及位元組

js中文長度校驗以及位元組

   單位元組指只佔一個字,是英文字元。雙字是佔兩個位元組的,中文字元都佔兩個位元組 
單位元組的英文是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]