jQuery formValidator中有个验证字符串长度的inputValidator
当输入16个字符或者8个以内的汉字时,提示都是正常的。
但是这个汉字的验证只是针对中文汉字,而不包括中文标点符号,举个例子:
如果输入7个汉字+2个中文标点的时候,验证仍然能通过。因为它把中文标点当做一个字符来处理了。
而在数据库中,中文标点是当2个字符来处理的。
打开源码formValidator3.5.js,找到判断字符串长度的函数,修改如下:
最后感谢作者猫冬(wzmaodong@126.com)的辛苦杰作。
$("#advName").formValidator({onshow:"请输入联系人",onfocus:"联系人至少1个字符,最多8个汉字",oncorrect:"输入正确"}).functionValidator({fun:function(val,elem){$(elem).val($.trim(val))}}).inputValidator({min:1,max:16,onerror:"联系人最少1个汉字最大8个汉字,请确认"});
当输入16个字符或者8个以内的汉字时,提示都是正常的。
但是这个汉字的验证只是针对中文汉字,而不包括中文标点符号,举个例子:
如果输入7个汉字+2个中文标点的时候,验证仍然能通过。因为它把中文标点当做一个字符来处理了。
而在数据库中,中文标点是当2个字符来处理的。
打开源码formValidator3.5.js,找到判断字符串长度的函数,修改如下:
//获取指定字符串的长度
getLength : function(id)
{
var srcjo = $("#"+id);
var elem = srcjo.get(0);
sType = elem.type;
var len = 0;
switch(sType)
{
case "text":
case "hidden":
case "password":
case "textarea":
case "file":
var val = srcjo.val();
var initConfig = $.formValidator.getInitConfig(elem.settings[0].validatorgroup);
if (initConfig.wideword)
{
for (var i = 0; i < val.length; i++)
{
if (val.charCodeAt(i) >= 0x4e00 && val.charCodeAt(i) <= 0x9fa5){
len += 2;
}else if ((val.charCodeAt(i) >= 0xff00 && val.charCodeAt(i) <= 0xffef)
|| (val.charCodeAt(i) >= 0x3000 && val.charCodeAt(i) <= 0x303f)){
//全角ASCII、全角中英文标点、半宽片假名、半宽平假名、半宽韩文字母
//作为2个字符计算
len += 2;
}else {
len++;
}
}
}
else{
len = val.length;
}
break;
case "checkbox":
case "radio":
len = $("input[type='"+sType+"'][name='"+srcjo.attr("name")+"']:checked").length;
break;
case "select-one":
len = elem.options ? elem.options.selectedIndex : -1;
break;
case "select-multiple":
len = $("select[name="+elem.name+"] option:selected").length;
break;
}
return len;
},
最后感谢作者猫冬(wzmaodong@126.com)的辛苦杰作。