フォームのテキストボックスからの入力で、文字数をバイト数換算でカウントしたいという場面はよくある。
JavaScriptのlength関数でカウントをすると、Netscapeは、全角は2バイト・半角は1バイトとして正しく計算をしてくれるけれども、Internet Explorerは全角も半角も1バイトとして計算をしてしまうので、正しくバイト数をカウントすることが出来ない。
そのため、Internet Exploreでは独自に関数を作ってカウントをおこなうことになる。
■escape関数でエンコードをして、「%u」で始まっていれば全角文字、そうでなければ半角文字としてカウントをするスクリプト。
str = escape(“水晶堂suishodo”);
len = 0;
for(i=0;i<str.length;i++,len++) {
if(str.charAt(i)==”%”) {
if(str.charAt(++i)==”u”) {
i += 3;
len++;
}
i++;
}
}
alert(len);
■別のやり方として、キャラクタコードを使って判定するスクリプト。
str = “水晶堂suishodo”;
len = 0;
for(i=0;i<str.length;i++){
iCode = str.charCodeAt(i);
if((iCode>=0 && iCode<=255)||(iCode>=0xff61 && iCode<=0xff9f)){
len += 1;
}else{
len += 2;
}
}
alert(len);