js substr支持中文截取函数代码(中文是双字节)


Posted in Javascript onApril 17, 2013
<script language="JavaScript"> 
//得到字符总数
function getChars(str) {
 var i = 0;
 var c = 0.0;
 var unicode = 0;
 var len = 0;
 if (str == null || str == "") {
  return 0;
 }
 len = str.length;
 for(i = 0; i < len; i++) {
   unicode = str.charCodeAt(i);
  if (unicode < 127) { //判断是单字符还是双字符
   c += 1;
  } else {  //chinese
   c += 2;
  }
 }
 return c;
}
function sb_strlen(str) {
    return getChars(str);
}
//截取字符
function sb_substr(str, startp, endp) {
    var i=0; c = 0; unicode=0; rstr = '';
    var len = str.length;
    var sblen = sb_strlen(str);
    if (startp < 0) {
        startp = sblen + startp;
    }
    if (endp < 1) {
        endp = sblen + endp;// - ((str.charCodeAt(len-1) < 127) ? 1 : 2);
    }
    // 寻找起点
    for(i = 0; i < len; i++) {
        if (c >= startp) {
            break;
        }
     var unicode = str.charCodeAt(i);
  if (unicode < 127) {
   c += 1;
  } else {
   c += 2;
  }
 }
 // 开始取
 for(i = i; i < len; i++) {
     var unicode = str.charCodeAt(i);
  if (unicode < 127) {
   c += 1;
  } else {
   c += 2;
  }
  rstr += str.charAt(i);
  if (c >= endp) {
      break;
  }
 }
 return rstr;
}
//调用示例:
function getShortFileName(filename) {
    short_filename = filename;
    if (sb_strlen(short_filename) > 61) {
        short_filename = sb_substr(short_filename, 0, 36) + ' ... ' + sb_substr(short_filename, -20);
    }
    return short_filename;
}
var chara = 'ni你2好1啊!'
js_self = chara.substr(4);
test = sb_substr(chara,4);
alert("js_self:"+js_self+"ext:"+test);
</script>
function mb_strlen(str) {
 var len = 0;
 for(var i = 0; i < str.length; i++) {
  len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1;
 }
 return len;
}
Javascript 相关文章推荐
从零开始学习jQuery (二) 万能的选择器
Oct 01 Javascript
jQuery Ajax异步处理Json数据详解
Nov 05 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
Nov 15 Javascript
JavaScript中String.prototype用法实例
May 20 Javascript
js实现的倒计时按钮实例
Jun 24 Javascript
原生js的RSA和AES加密解密算法
Oct 08 Javascript
JScript实现地址选择功能
Aug 15 Javascript
自制简易打赏功能的实例
Sep 02 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
Oct 20 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
Dec 19 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
Dec 28 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
Apr 14 Javascript
中文字符串截取的js函数代码
Apr 17 #Javascript
解决IE6的PNG透明JS插件使用介绍
Apr 17 #Javascript
Web跨浏览器进程通信(Web跨域)
Apr 17 #Javascript
js读写(删除)Cookie实例详解
Apr 17 #Javascript
基于dom编程中 动态创建与删除元素的使用
Apr 17 #Javascript
javaScript(JS)替换节点实现思路介绍
Apr 17 #Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
Apr 17 #Javascript
You might like
Function eregi is deprecated (解决方法)
2013/06/21 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
酒店开业庆典主持词
2014/03/21 职场文书
养牛场项目建议书
2014/05/13 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
老兵退伍标语
2014/10/07 职场文书
师范生见习报告范文
2014/11/03 职场文书
技术负责人岗位职责
2015/02/10 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js