jQuery formValidator插件的一个不完善的地方

jQuery formValidator中有个验证字符串长度的inputValidator

$("#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)的辛苦杰作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值