方法一:
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; }
方法二:
function getStringLen(Str) { var i, len, code; if (Str == null || Str == "") return 0; len = Str.length; for (i = 0; i < Str.length; i++) { code = Str.charCodeAt(i); if (code > 255) { len += 1 } } return len; }
方法三:
function getStringLen(val) { var len = 0; for (var i = 0; i < val.length; i++) { var a = val.charAt(i); if (a.match(/[^x00-xff]/ig) != null) { len += 2; } else { len += 1; } } return len; }
方法四:
function getStringLen(str) { var len = 0; for (var i = 0; i < str.length; i++) { str.charCodeAt(i) > 255 ? len += 2 : len += 1; } return len; }
以上几种方法都大同小异;来一个不一样的:
方法五:
function getBLen(str) { // 把双字节的替换成两个单字节的然后再获得长度 if (str == null) return 0; if (typeof str != "string") { str += ""; } return str.replace(/[^x00-xff]/g, "01").length; }
注:[^x00-xff]即ASCII 编码,表示不在0-255的字符。而charCodeAt() 方法返回指定位置的字符的 Unicode 编码。汉字的编码范围是不在0-255内的。