在很多时候,我们在进行数据提交数据库时.先会用javascript对其进行有效性验证.如一个中文javascript为的length是1.但是数据库中会占二个字节.容易出错
如何解决这个问题.本文介绍使用js来获取中文字长度方法
首先,我们定义一个新的函数getBytes()取得字符串的字节数,在javascript里,这个函数是标准函数。 代码如下: String.prototype.getBytes = function() { var cArr = this.match(/[^x00-xff]/ig); return this.length + (cArr == null ? 0 : cArr.length); } function paramCheck(cur){ if(cur.value.getBytes() > 64){ alert("字符超过64个字符"); return false; } return true; }
getBytes用正则表达式来判断字符串中包含汉字的个数,包含的汉字都放到数组cArr中,这样cArr的长度就是汉字的总数。getBytes方法返回length加上汉字数,就是总的字节数。 只是使用了[^x00-xff],这个有点恶心,有些特殊字符也是能匹配到的,比如}等。 但是如果使用[^u4E00-u9FA5]的话,却不能匹配到中文……
以下是另外几种方法,大家可以测试下: 一种: 代码如下: function _length(str){ var len=0; for(var i=0;i<str.length;i++){ if(str.charAt(i)>'~'){len+=2;}else{len++;} } return len; }
二种: 代码如下: String.prototype.gblen = function() { var len = 0; for (var i=0; i<this.length; i++) { if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { len += 2; } else { len ++; } } return len; } String.prototype.gbtrim = function(len, s) { var str = ''; var sp = s || ''; var len2 = 0; for (var i=0; i<this.length; i++) { if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { len2 += 2; } else { len2 ++; } } if (len2 <= len) { return this; } len2 = 0; len = (len > sp.length) ? len-sp.length: len; for (var i=0; i<this.length; i++) { if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { len2 += 2; } else { len2 ++; } if (len2 > len) { str += sp; break; } str += this.charAt(i); } return str; } var str1 = '世上最牛的@#%&们 世上最牛的@#%&们'; document.write('str1 = '+ str1 +' '); document.write('length = '+ str1.gblen() +' '); document.write('gbtrim(10) = '+ str1.gbtrim(10) +' '); document.write('gbtrim(10, \'…\') = '+ str1.gbtrim(10, '…') +' '); document.write('gbtrim(12, \'-\' ) = '+ str1.gbtrim(12, '-') +' ');
// gbtrim(len 截取长度,按英文字节长度计算, s截取后的省略字符,如"…" ) // 备注: 这里中文字符都是当作两个长度来计算的,所以gbtrim中的len为10时,是显示最多5个汉字的。 // 当汉字数大于5时,由于截取后加上“…”,所以只显示4个汉字。