javascript 计算字符串的字节长度

  在做前端验证表单时,有时候要检测一个字符串的字节长度,保证其字节长度不超过数据库表中对应字段允许的最大长度。

  不废话,上方法

  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框架设计》

转载于:https://www.cnblogs.com/MiCoo/p/4031616.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值