JavaScriptのString#lengthは文字数を返すためバイト数を出すメソッドを追加する。
たとえばDBにバイト数で制限がかかっていてフロントでも補助的にバリデーションをかけるような場合に。
bytes.js
String.prototype.bytes = function () {
var bytes = 0,
i,c,
len = this.length;
for(i=0 ;i < len ; i++){
c = this[i].charCodeAt(0)
if (c <= 127){
bytes += 1;
} else if (c <= 2047){
bytes += 2;
} else {
bytes += 3;
}
}
return bytes;
};
下記のようになる
sample.js
console.log( "あああa".bytes() ); // -> 10
console.log( "èî".bytes() ); // -> 4
ただし、この実装は厳密ではない