JavaScript で最大文字数をByteで設定する
テーブルを見ると,不幸にもそのフィールドが,文字数を半角でも全角でも1文字は1桁としてカウントしてくれるnvarcharでなく,半角は1桁全角は2桁と判断してしまうvarcharに設定されている場合,ブラウザから入力する文字数を何桁で制限すればいいか迷うところじゃないでしょうか。
なぜならHTMLの input=”text” で,最大文字数を20桁と設定すると,半角も全角も20桁までの入力となり,例えば,帳票出力などで,きっちり枠内に文字列を収める為に,半角だけは40桁入力できれば・・ ようなエレガントな対応ができません。
そのような時に,以下の様なJavaScriptを拵えて,onBlur=”isByteCheck(this, 40)” の様に設定してあげてください。
入力文字列を,Byteで計算しサイズをはみ出している場合はメッセージを出します。
一つ目のパラメタは,カレントオブジェクト(input),2つ目のパラメタは,最大入力Byte数です。
以下にソースを覚え書きします。
===
/** 指定バイトを超えたらメッセージを出す
* 戻り値:超えている場合:false
*/
function isByteCheck(obj, maxByte) {
var value = obj.value;
var count = getByteCount(value);
if (count > maxByte) {
alert(”入力文字数が多すぎます。全角(” + (maxByte/2) + “)文字以下に減らしてください。”);
obj.select();
return true;
} else {
return false;
}
}
/** バイト数を計算する
*/
function getByteCount(value) {
var count = 0;
for ( var i = 0; i < value.length; ++i ) {
var sub = value.substring(i, i + 1);
if( checkIsZenkaku(sub) ){
count += 2;
} else {
count += 1;
}
}
return count;
}
/** 全角チェック(全角:true)
*/
function checkIsZenkaku(value) {
for (var i = 0; i < value.length; ++i) {
var c = value.charCodeAt(i);
if (c < 256 || (c >= 0xff61 && c <= 0xff9f)) {
return false;
}
}
return true;
}
以上です。