日期:2014-05-16  浏览次数:20415 次

使用JS来做中英文混合字符长度限制
最近在写一个系统,但是数据库中设计的是全汉字的长度为最大

那么在HTML端,取字符长度来说,str.length的长度不管用英文,只计算单纯的长度,而不是占用的字符长度

下面是自己综合网上的 计算字符长度,以及截取字符长度自己组装写了的一套方法

$(document).ready(function() {
	$( "input,textarea" ).live("input",function() {
		debugger;
		var limit = $(this).attr("charLength"); 
		if(limit==""||limit==null) {
			return;
		}
		var length = fucCheckLength($(this).val());
		if(length>limit) {
			$(this).val(subCharStr($(this).val(),limit));
		}
	});
});

function fucCheckLength(strTemp) {
    var i, sum;   
    sum = 0;   
    for (i = 0; i < strTemp.length; i++) {   
        if ((strTemp.charCodeAt(i) >= 0) && (strTemp.charCodeAt(i) <= 255)) {   
            sum = sum + 1;   
        } else {   
            sum = sum + 2;   
        }   
    }   
    return sum;   
}

function subCharStr(str,n){  
   var _len=fucCheckLength(str,n);
   if(_len>n){  
     var _newLen=Math.floor(n/2);  
     var _strLen=str.length;
     var _newStr = "";
     for(var i=_newLen;i<=_strLen;i++){
    	 var tmpStr = str.substr(0,i);
         if(fucCheckLength(tmpStr)>n){
             return _newStr;
             break;
        } else {
        	_newStr = tmpStr;
        }
     }  
   }else{  
     return str;  
   }  
}


这样只要在Input中添加charLength属性,并给一个字符长度的值就OK了

比如,限制的为5
那么3个汉字就会被截取成两哥
如果是两个汉字一个英文字母,则还是5个字符