在做前端验证表单时,有时候要检测一个字符串的字节长度,保证其字节长度不超过数据库表中对应字段允许的最大长度。
不废话,上方法
1.我们通常遇到的情况都是中文+英文,所以可以判断每个字符的 Unicode 编码值,大于255,表示中文,字节应该比英文大1个字节:
1 function byteLength(str){ 2 var byteLen = str.length, len = str.length, i; 3 for(i = 0;i<len;i++){ 4 if(str.charCodeAt(i) > 255){ 5 byteLen++; 6 } 7 } 8 return byteLen; 9 }
要注意的是,中文字符对应的字节数可能会因使用的字符编码不同而不同。
2.解决不同编码,中文字符对应字节数不同的问题,主要是针对utf-16:
1 //utf-8 是可变长度的 Unicode 编码格式,每个字符对应1~4个字节 2 //utf-16大部分使用两个字节编码,编码超出65535(00ffff)的使用4个字节 3 function byteLength(str, charset){ 4 var total = 0, 5 charcode, 6 i, 7 len = str.length, 8 byteLen, 9 charset = charset ? charset.toLowerCase() : ‘‘; 10 if(charset === ‘utf16‘ || charset === ‘utf-16‘){ 11 for(i = 0;i<len;i++){ 12 if(str.charCodeAt(i) <= 0xffff){ 13 byteLen += 2; 14 }else{ 15 byteLen += 4; 16 } 17 } 18 }else{ 19 for(i = 0;i<len;i++){ 20 if(str.charCodeAt(i) <= 0x007f){ 21 byteLen += 1; 22 }else if(str.charCodeAt(i) <= 0x07ff){ 23 byteLen += 2; 24 }else if(str.charCodeAt(i) <= 0xffff){ 25 byteLen += 3; 26 }else{ 27 byteLen += 4; 28 } 29 } 30 } 31 return byteLen; 32 }
参考《javascript框架设计》
时间: 2024-11-05 21:58:11