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;
    }
    
  • 相关阅读:
    K210识别水果模型
    一键开关机短路
    Arudino IDE添加STM32官方管理器stm32duino / Arduino_Core_STM32
    ESP32 Ble
    Blynk软件配置及Mixly编程教程
    Laravel安装及配置,完成基础的demo
    electron下载/打包慢?解决办法.....
    ESP32+PHP+MYSQL 搭建自己的物联网平台Demo
    PCA9536读写测试之MicroPython
    MSF实验2
  • 原文地址:https://www.cnblogs.com/michaelye/p/4449844.html
Copyright © 2011-2022 走看看