JS判断中英文字符长度,客户端验证,中文两个字节,英文一个字节

本文介绍了一个用于计算字符串中有效字符数量的JavaScript函数。该函数通过遍历字符串并检查每个字符是否为有效字符来实现计数。有效字符定义为ASCII范围内的标准字符和特定的全角字符。

function countCharacters(str){
     var totalCount = 0;
     
     for (var i=0; i<str.length; i++) {
         var c = str.charCodeAt(i);
         if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)) {
             totalCount++;
         }else {    
             totalCount+=2;
         }
         
     }
     return totalCount;
    
}

### 判断中文字符英文字符及其字节占用 在 JavaScript 中,可以通过字符的 Unicode 编码范围来区分中文字符英文字符。通常情况下: - **英文字符**(ASCII 字符)的 Unicode 范围是 `0x0000` 到 `0x007F`,每个字符在 UTF-8 编码下占用 **1字节**。 - **中文字符**的 Unicode 范围大致在 `0x4E00` 到 `0x9FFF` 之间,在 UTF-8 编码下占用 **3 个字节**[^2]。 #### 区分中文字符英文字符的实现 以下是一个用于判断单个字符是否为中文字符的函数: ```javascript function isChineseChar(char) { return '\u4e00' <= char && char <= '\u9fff'; } ``` 该函数通过比较字符的 Unicode 编码范围来判断其是否为中文字符。 #### 计算字符串在 UTF-8 编码下的字节长度 UTF-8 是一种可变长度编码格式,不同字符可能占用不同的字节数。以下是根据 UTF-8 编码规则计算字符字节长度的实现: ```javascript function getByteLength(str) { let len = 0; for (let i = 0; i < str.length; i++) { const c_hex = str.charCodeAt(i); if (c_hex <= 0x007f) { len += 1; // 占用1字节 } else if (c_hex >= 0x0080 && c_hex <= 0x07ff) { len += 2; // 占用2字节 } else if (c_hex >= 0x0800 && c_hex <= 0xffff) { len += 3; // 占用3个字节 } else { len += 4; // 占用4个字节 } } return len; } ``` 此函数通过遍历字符串中的每个字符,并根据其 Unicode 编码确定在 UTF-8 编码下所占的字节数。 #### 示例:计算混合字符串的字节长度 假设有一个包含中英文字符字符串 `"Hello世界"`,可以使用上述函数计算其字节长度: ```javascript const s = "Hello世界"; console.log(getByteLength(s)); // 输出 13(5 个英文字符 + 2中文字符 * 3 字节) ``` 在这个例子中: - `"Hello"` 占用 5 个字节(每个英文字符 1 字节)。 - `"世界"` 占用 6 个字节(每个中文字符 3 字节)。 - 总共占用 11字节。 #### 实际应用注意事项 在实际开发中,特别是在涉及多语言文本处理时,需要注意以下几点: - **编码一致性**:确保前端和后端使用相同的编码格式(如 UTF-8),以避免乱码问题。 - **性能优化**:对于大量文本处理任务,选择合适的编码格式可以减少内存占用并提升处理效率。 - **存储限制**:当使用 `localStorage` 等本地存储机制时,需要考虑字符串的字节大小,以避免超出存储限制。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值