1. 程式人生 > >js中的字串長度

js中的字串長度

眾所周知String物件的length屬效能夠返回字串的長度,不管字元是單位元組還是雙位元組,都作為一個長度單位來計算。因此要準確的獲取字元長度,必須通過手工來寫。

下面介紹兩種方式:

1、迴圈遍歷字串,根據字元的編碼,來判斷當前字元是雙位元組還是單位元組,然後遞加字串的位元組數。

<span style="font-size:14px;">String.prototype.lengthSingle = function(str){
var b = 0;
for(var i=0,l=str.length;i<l;i++){
	if(this.chartCodeAt(i)>255){
		b +=2;
	}else{
		b++;
	}
}
return b;
}</span>

或者根據escape來判斷是否為單位元組還是雙位元組。escape的作用是對   String   物件編碼以便它們能在所有計算機上可讀。

escape   方法返回Unicode格式的字串值。所有空格、標點、重音符號以及 其他非   ASCII   字元都用   %xx   編碼代替,其中   xx   等於表示該字元的十六進位制數。例如,空格返回的是 "%20 "   。 字元值大於   255   的以   %uxxxx   格式儲存。   因此可以通過使用escape方法後返回的值的長度來確定是單位元組還是雙位元組。

<pre name="code" class="javascript"><span style="font-size:14px;">String.prototype.lengthSingle = function(str){
var b = 0;
for(var i=0,l=str.length;i<l;i++){
	var c = this.charAt(i);
	if(escape(c).length>4){
		b+=2;
	}else if(c!="\r"){
		b++;
}
}
return b;
}</span>
亦可以使用正則表示式來判斷為單位元組還是雙位元組。
<pre name="code" class="javascript"><span style="font-size:14px;">String.prototype.lengthSingle = function(str){
var b = 0;
for(var i=0,l=str.length;i<l;i++){
	var c = this.charAt(i);
	if(/^[\u0000-\u00ff]$/.test(c)){
		b++;
	}else{
		b+=2;
	}
}
return b;
}</span>
第二種方式,則是將字串中的所有雙位元組字元,使用**代替,然後再統計長度。由於會使用到兩次遍歷,因此效率沒有第一種高。故不描述了。