`

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)的辛苦杰作。
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics