js处理包含中文的字符串实例


Posted in Javascript onOctober 11, 2017

场景:

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处理包含中文的字符串实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJS中文乱码之GBK格式编码解决方案及代码
Jan 20 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
Jun 03 Javascript
ionic实现滑动的三种方式
Aug 27 Javascript
VueJS全面解析
Nov 10 Javascript
在nginx上部署vue项目(history模式)的方法
Dec 28 Javascript
React中常见的动画实现的几种方式
Jan 10 Javascript
小程序实现左右来回滚动字幕效果
Dec 28 Javascript
说说Vuex的getters属性的具体用法
Apr 15 Javascript
微信小程序-API接口安全详解
Jul 16 Javascript
vue v-on:click传递动态参数的步骤
Sep 11 Javascript
解决Vue-cli无法编译es6的问题
Oct 30 Javascript
解决JQuery全选/反选第二次失效的问题
Oct 11 #jQuery
React根据宽度自适应高度的示例代码
Oct 11 #Javascript
详解vue中使用express+fetch获取本地json文件
Oct 10 #Javascript
vue router自动判断左右翻页转场动画效果
Oct 10 #Javascript
angular2 ng2 @input和@output理解及示例
Oct 10 #Javascript
ionic选择多张图片上传的示例代码
Oct 10 #Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
Oct 10 #Javascript
You might like
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
JavaScript 比较时间大小的代码
2010/04/24 Javascript
javascript preload&amp;lazy load
2010/05/13 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
物业管理员岗位职责范文
2013/11/25 职场文书
接待员岗位责任制
2014/02/10 职场文书
小学数学课后反思
2014/04/23 职场文书
班级学习计划书
2014/04/27 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
技术经济专业求职信
2014/09/03 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
水电施工员岗位职责
2015/04/11 职场文书
小学教学工作总结2015
2015/05/13 职场文书