input控件有个length的属性,可以方便地获取字数。可是,它所返回的字数无论是中文还是英文或者数字,1个字就算1个字。客户要限制字数的原因是为了页面显示的时候排版不会乱,因此一个汉字需要按2个英文字符来计算。php也是以一个汉字按2个英文字符计算的。这样的话,这个默认的length就无用武之地了。
怎么区分中文和英文呢?
string对象有一个叫charCodeAt(index)的方法,可以获取字符串中某一个字符的编码。我们都知道,字母数字的ascii编码都小于255而汉字的编码肯定大于255,因此我们可以使用此方法来判断字符串占用多少英文字符的宽度。
以下为引用的内容: function GetCharLength(str) { var iLength = 0; for(var i = 0;i<str.length;i++) { if(str.charCodeAt(i) >255) { iLength += 2; } else { iLength += 1; } } return iLength; } |
字数统计有了,接下去我们需要实时地捕获用户的输入。我们可以采取在input文本框的onkeyup事件中加入字符串检测函数的调用即可。
在检测完字符长度后,对于那些超长的,我们将采用自后往前截断的方法将多余的字符去除。
字符截断代码如下:
以下为引用的内容: function CutStr(Str,Len) { var CurStr = ""; for(var i = 0;i<Str.length;i++) { CurStr += Str.charAt(i); if(GetCharLength(CurStr )>Len) { return Str.substring(0,i); } } return CurStr ; } |
以下为引用的内容: String.prototype.len=function(){ return this.replace(/[^\x00-\xff]/g,"**").length; } |
以下为引用的内容: if (uname.len()>10){ $("idTips").innerHTML=" 用户名长度超过限制"; } |