/**
 * 该方法用于截取字符串,根据字符和汉语的占位符有对应不同的处理
 * 
 * eg: var titleValue = '1112322';
var showValue = oleSubstring(titleValue, 4);
if (titleValue == showValue) {
titleValue = '';
}
 * @param titleValue 被截取的字符串
 * @param splitLength 需要截取的长度
 * @returns 截取后的字符串
 */
function oleSubstring(titleValue, splitLength) {
var str_length = 0;
var showValue = new String();
var titleValueLength = titleValue.length;
for ( var i = 0; i < titleValueLength; i++) {
var charValue = titleValue.charAt(i);
str_length++;
if (escape(charValue).length > 4) {
// 中文字符的长度经编码之后大于4
str_length++;
}
if (str_length > splitLength) {
break;
}
showValue = showValue.concat(charValue);
}
if (str_length > splitLength) {
showValue = showValue.concat("...");
}
return showValue;

}

由于javascript是unicode编码的,所有的字符对于它来说一个就是一个,但是后台程序不是,通常在后台程序中一个中文是占两个字节的,这就导致了前后端校验长度不一致,这个问题可以通过正则来解决。

[javascript] view plain copy
  1. function getRealLen( str ) {
  2. return str.replace(/[^\x00-\xff]/g, '__').length; //这个把所有双字节的都给匹配进去了
  3. }

附赠另一小则技巧:

有时候为了美观,不影响布局和界面,会以一些文案进行截字,但是中文的宽度和英文的宽度不一样,如果按照英文标准来截中文的,或者按中文标准截英文的,显然会忽长忽短,特别是昵称这类容易既有中文又有英文的东西,同样我们可以用上面的思路

[javascript] view plain copy
  1. function beautySub( str, len) {
  2. var reg = /[\u4e00-\u9fa5]/g,    //专业匹配中文
  3. slice = str.substring(0,len),
  4. realen = len - ( ~~( slice.match(reg) && slice.match(reg).length ) );
  5. return slice.substring(0, realen ? realen : 1);
  6. }

这里我们认为一个中文字符是两个英文字符的宽度,如果你是完美主义者,应该想到j和w,m的宽度是不一样的,w和m以及大写的部分字母和中文的宽度是一致的,这个函数的正则还有相当大的改进空间,同时也可以指定截字的起始位置。

function beautySub( str, len) {  
    var reg = /[\u4e00-\u9fa5]/g,    //专业匹配中文  
        slice = str.substring(0,len),  
        /**其实是一种利用符号进行的类型转换,转换成数字类型
~~true == 1
~~false == 0
~~"" == 0
~~[] == 0

~~undefined ==0
~~!undefined == 1
~~null == 0
~~!null == 1

整数的操作
JavaScript中是没有整型概念的,但利用好位操作符可以轻松处理,同时获得效率上的提升。

|0和~~是很好的一个例子,使用这两者可以将浮点转成整型且效率方面要比同类的parseInt,Math.round 要快。在处理像素及动画位移等效果的时候会很有用。性能比较见此。

var foo = (12.4 / 4.13) | 0;//结果为3
var bar = ~~(12.4 / 4.13);//结果为3
顺便说句,!!将一个值方便快速转化为布尔值 !!window===true 。
        */
        realen = len - ( ~~( slice.match(reg) && slice.match(reg).length ) );  
        return slice.substring(0, realen ? realen : 1);  
}

js中计算中文长度方法相关推荐

  1. 切割字符串长度php,C++_C语言中计算字符串长度与分割字符串的方法,C语言strlen()函数:返回字符串 - phpStudy...

    C语言中计算字符串长度与分割字符串的方法 C语言strlen()函数:返回字符串的长度头文件: #include strlen()函数用来计算字符串的长度,其原型为: unsigned int str ...

  2. Shell脚本中计算字符串长度的5种方法

    这篇文章主要介绍了Shell脚本中计算字符串长度的5种方法,来自于个人Shell脚本长期的开发经验,需要的朋友可以参考下 有时在Linux操作系统中需要计算某个字符串的长度,通过查询资料整理了下目前S ...

  3. js中的字符长度问题

    今天遇到一个小问题,使用UTF-8这种Unicode编码存储格式时,用js中的字符串的length属性获取输入框中输入的字符长度时,输入中文也是按一个字符算,刚才查了下资料,原来在JS中字符串的长度不 ...

  4. 在python中使用中文_Python中使用中文的方法

    python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识.当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了. 先来看看pytho ...

  5. JS中所有遍历的方法

    JS中所有遍历的方法 1.for for(let i=0;i<len;i++){//do something} 2.forEach forEach 循环不支持return实例:let arr = ...

  6. vue 懒人_Vue.js 中的实用工具方法【推荐】

    收集日常开发中常用到的一些工具方法, 包含 vue 的公用过滤器.公用指令等 (PS: 懒人养成记) 公用自定义过滤器 import Vue from 'vue' import moment from ...

  7. js中数组常用的方法总结,包括ES6

    原文地址:js中数组常用的方法总结,包括ES6 1.push() 后增 push()方法可以向数组后添加一个新的元素,并返回新数组的长度. 末尾添加,返回长度,改变原数组 var a = [1,2,3 ...

  8. JS中 new Date() 各方法的用法

    JS中 new Date() 各方法的用法 1.new Date() 参数篇 a.返回类型为国标时间, b.无参数时可以直接返回输出时的时间, c.有参数时则返回对应时间的国标时间, d.日期中间的符 ...

  9. JS中数组使用的方法

    JS中数组使用的方法 数组的介绍 JavaScript Array(数组):属于对象的一种 在句子中的作用就是使用一个单独的变量来存储一系列的值 数组的创建方法 1.字面量方式:var arr=[] ...

最新文章

  1. 【spring】在不联网的情况下查看xml的定义规则的方法
  2. 转载:PHP JSON_ENCODE 不编码中文汉字的方法
  3. 实现做出html的上标以及下标
  4. alertdialog android api 11,android – 设备api级别11的DialogFragments
  5. pip临时使用国内下载源,提高下载的速度
  6. java treelist 排序_一个很好的Java排序列表
  7. Unwind 栈回溯详解:libunwind
  8. 机器学习实战(十三)推荐系统(协同过滤 Collaborative Filtering)
  9. layer + ajax 弹出框
  10. 如何获取CSDN积分?
  11. Pycharm 主题背景色的配置
  12. 数学建模编程用c语言,C程序设计一百例--用c语言解决数学建模问题.doc
  13. 2021年特种设备气瓶充装(全国特种设备-P气瓶充装模拟考试题库一)安考星
  14. U盘量产后USB鼠标和键盘都无法使用,如何解决?
  15. 2022年卫浴行业报告:套系化+智能化拓宽边际,箭牌家居内资领航
  16. JAVA基础-java继承类实现
  17. windows10 背景加载不出来变成黑色背景
  18. 高性价比掌机Retroid Pocket 3:搭载展锐芯片T310,采用PowerVR GPU
  19. BOL简单分析(一)
  20. 嵌入页面拒绝了我们的连接请求

热门文章

  1. 多读多写多实践---给初学编程者的建议
  2. Flash Socket安全问题的全面解析 服务器端代码
  3. asp.net开源CMS汇总
  4. 从语义(semantic)GIS和知识表达谈起
  5. 响应用户呼声 币安更正BCH简称
  6. 使用淘宝的IP查询API实现IP地址省市展示
  7. jquery用添加按钮把数据传送给PHP页面
  8. Sqlserver:sp_recompile的副作用
  9. 公告:Rover's Official Blog停止更新
  10. 第二阶段 铁大Facebook——十天冲刺(七)