zoukankan      html  css  js  c++  java
  • js获取(包括中文)字符串长度与截取字符串

    /**
     * @param begin 截取开始的索引
     * @param num 截取的长度
     */
    //截取字符串(包括中文) 
    function SetString(str, len) {
        var strlen = 0; 
        var s = "";
        for (var i = 0; i < str.length; i++) {
            var m =  str.charAt(i).match(/[^x00-x80]/g);//利用match方法检索出中文字符并返回一个存放中文的数
            if (m!=null && m.length>0) {
                strlen += 2;
            }
            else {
                strlen++;
            }
            s += str.charAt(i);
            if (strlen >= len) {
                return s;
            }
        }
        return s;
    }
    
    //得到字符总数
    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 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;
    }
    
  • 相关阅读:
    asp.net mvc(2013424)——基本知识
    asp.net mvc(2013425)——使用模板页
    jquery实现tab切换核心代码
    asp.net mvc(2013422 )——准备入门
    也说C#串行化
    Net Assembly.GetExecutingAssembly() 和 Assembly.GetCallingAssembly()的区别
    log (一)
    C# 重载和从写的区别
    log4net
    C# 反射
  • 原文地址:https://www.cnblogs.com/michaelye/p/4449844.html
Copyright © 2011-2022 走看看