JavaScriptで全角2文字、半角1文字でカウントする

前の「JavaScriptで文字数でなくてバイト数を求める」だとUTF8ベースなので、1文字が3バイトや4バイトになってしまう…

なので、今回は全角2文字、半角1文字でカウントする関数を作ってみました。
他の国の言葉は知らないので、完全ではないでしょうが、日本語だったらこれで大丈夫かなぁ…

不味かったらご指摘ください。

function bytes(str) {
	str = str.replace(/[。-゚]/g, 'K');
	var hex = '';
	for (var i = 0; i < str.length; i++) {
		hex += str.charCodeAt(i).toString(16);
	}
	return hex.length/2;
}

軽く解説:
まず引数の半角カタカナを1バイトでカウントするために、'K'に置き換えています。
次は、charCodeAt&toString(16)で文字コードを16進数に変換してます。
最後に、16進数に変換した文字列の文字数を2で割ってるだけです。
ちなみに、charCodeAtはUTF16の文字コードを10進数で返してくれます。
んでもって、toString(16)はNumberを16進数にしてくれます。
toString(16)の0埋めは、入力できる文字は0x20からだから気にしなくて良さそうだ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です