jsの文字列の長さ
1645 ワード
Stringオブジェクトのlength属性は、文字列の長さを返すことができることはよく知られています.文字が単バイトであろうと、二バイトであろうと、長さの単位として計算されます.文字の長さを正確に取得するには、手で書く必要があります.
二つの方法を紹介します.
1、文字列を巡回して、文字の符号化によって、現在の文字が二バイトかそれとも単バイトかを判断し、文字列のバイト数を逓加する.
エスケープ メソッドは、Unicode形式の文字列の値を返します.スペース、句読点、アクセント記号、および その他の非 ASCII 文字をすべて使う %xx コードの代わりに xx この文字の16進数を表します.例えば、スペースは「%20」です. . 文字の値が大きい 255 をもって %uxxxx フォーマットの保存 したがって、escape法を用いて返した値の長さによって、1バイトか2バイトかを決定することができる.
二つの方法を紹介します.
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 オブジェクトはすべてのコンピュータで読むことができるようにエンコードされます.エスケープ メソッドは、Unicode形式の文字列の値を返します.スペース、句読点、アクセント記号、および その他の非 ASCII 文字をすべて使う %xx コードの代わりに xx この文字の16進数を表します.例えば、スペースは「%20」です. . 文字の値が大きい 255 をもって %uxxxx フォーマットの保存 したがって、escape法を用いて返した値の長さによって、1バイトか2バイトかを決定することができる.
<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>