分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

js处理包含中文的字符串

发布时间:2023-09-06 01:16责任编辑:白小东关键词:js

场景:

js中String类型自带的属性length获取的是字符串的字符数目,但是前端经常会需要限制字符串的显示长度,一个中文字符又大概占两个英文小写字符的显示位置,所以中英文混合的情况下用length值来判断显示长度往往并不正确。

常规的解决办法是遍历字符串,中文字符计长度2,非中文字符计长度1,通过新计算出来长度总和来限制字符串的显示长度。看代码↓↓↓

var Tools ={ ???//是否包含中文 ???hasZh: function(str){ ???????for(var i = 0;i < str.length; i++) ???????{ ???????????if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2 ???????????????return true; ???????????return false; ???????} ???}, ???//重新计算长度,中文+2,英文+1 ???getlen: function(str){ ???????var strlen = 0; ???????for(var i = 0;i < str.length; i++) ???????{ ???????????if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2 ???????????????strlen += 2; ???????????else ???????????????strlen++; ???????} ???????return strlen; ???}, ???//限制长度 ???limitlen: function(str, len){ ???????var result = ""; ???????var strlen = 0; ???????for(var i = 0;i < str.length; i++) ???????{ ???????????if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2 ???????????????strlen += 2; ???????????else ???????????????strlen++; ???????????result += str.substr(i,1); ???????????if(strlen >= len){ ???????????????break; ???????????} ???????} ???????return result; ???}}

这种方法的原理是根据中英文的unicode编码范围不同来判断的,中文占2个字节,英文占1个字节,所以中文的unicode编码值肯定大于2^8-1=255。

上述方法可以更严谨一点:就是考虑unicode编码范围,具体的范围可以戳Unicode Table

PS: 汉字的unicode编码范围16进制为4E00-9FA5,10进制则为:19968-40869,即判断中文的准确表达式为:

str.charCodeAt(i)>=19968 && str.charCodeAt(i)<=40869

插一句不太严谨的话,代码不用限制太严谨的范围,毕竟你不知道用户(测试)会输哪些奇怪的东西。

收工!

js处理包含中文的字符串

原文地址:http://www.cnblogs.com/dantis/p/7647277.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved