ITPub博客

首页 > 应用开发 > IT综合 > 日文全角文字长度check BUG

日文全角文字长度check BUG

原创 IT综合 作者:riyeye 时间:2007-09-19 16:54:44 0 删除 编辑

--------------------------------------------------------------------------

描述:

日文全角汉字以及符号存入数据库中实际是占2个字符。

所以check的时候如果直接用 testField.length() > 100 这样的话,会引起这个类型的bug。数据库中字段长度为100,输入51个日文汉字的话就会抛出异常。中文汉字也有相同的情况。

--------------------------------------------------------------------------

类型:

欧美项目后遗症,常见于没有做过国内或者日本项目的人。

--------------------------------------------------------------------------

示例代码:

java中:

// if(workSummary.length() > 1024) 错误的长度检查

if(workSummary.getBytes("MS932").length > 1024) {

javaScript:

以下JavaScript校验日文环境下的用户输入
直接调用fvallenchk函数即可,obj为要校验的对象,max_len为最大长度,该函数返回0表示长度超出,反之则通过.

function fgetdata(Obj){
wkValue = "";
wkType = Obj.type;
if (wkType == "text") {
wkValue = Obj.value;
} else if (wkType == "hidden") {
wkValue = Obj.value;
} else if (wkType == "select-one") {
SelIx = Obj.selectedIndex;
wkValue = Obj.options[SelIx].value;
} else if (wkType == "textarea") {
wkValue = Obj.value;
} else if (wkType == "password") {
wkValue = Obj.value;
}
return wkValue;
}

function fvallenchk(obj,max_len){
var chkstr,i,cnt = 0;

chkstr = "????????`??????????????????????????????????????????????????";
strValue = fgetdata(obj);
for(i=0; i if(escape(strValue.charAt(i)).length >= 4 ){
if ( chkstr.indexOf(strValue.charAt(i))== -1){
cnt+=2;
}else{
cnt++;
}
}else{
cnt++;
}
};
if (cnt > max_len) {
return "0";
} else {
return "1";
}
}

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16163/viewspace-970122/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 日期验证的BUG
请登录后发表评论 登录
全部评论
  • 博文量
    17
  • 访问量
    170720