zoukankan      html  css  js  c++  java
  • 按字节长度截取字符串

    默认的截取字符串都是根据字符长度或位置截取的,典型的两个方法是substr和substring。

    这样导致的问题是截取同样长度的字符串时,多字节字符(汉字等)和单字节字符(半角英文字母、半角数字)占的位置长度差距较大,视觉上不太美观,比如同样是10个字符:

    壹贰叁肆伍陆柒捌玖拾
    abcdefghih

    /*
    * param str 要截取的字符串
    * param L 要截取的字节长度,注意是字节不是字符,一个汉字两个字节
    * return 截取后的字符串
    */
    function cutStr(str,L){
    var result = '',
    strlen = str.length, // 字符串长度
    chrlen = str.replace(/[^x00-xff]/g,'**').length; // 字节长度

    if(chrlen<=L){return str;}

    for(var i=0,j=0;i<strlen;i++){
    var chr = str.charAt(i);
    if(/[x00-xff]/.test(chr)){
    j++; // ascii码为0-255,一个字符就是一个字节的长度
    }else{
    j+=2; // ascii码为0-255以外,一个字符就是两个字节的长度
    }
    if(j<=L){ // 当加上当前字符以后,如果总字节长度小于等于L,则将当前字符真实的+在result后
    result += chr;
    }else{ // 反之则说明result已经是不拆分字符的情况下最接近L的值了,直接返回
    return result;
    }
    }
    }

    // 用例
    alert(cutStr("测试1字符串哈哈哈哈",10));
    alert(cutStr("abcdefghigklmn",10));

  • 相关阅读:
    C#基础篇十小练习
    C#基础篇九OOP属性结构枚举
    C#基础篇八构造函数和面向对象思想
    C#基础篇七类和静态成员
    C#基础篇六飞行棋
    C#基础篇五值类型和引用类型
    数据与地址的自动给定---基于状态机
    SPI 核的寄存器空间
    mig_7series DDR控制器的配置
    关于zynq7 中MIO的理解
  • 原文地址:https://www.cnblogs.com/gopark/p/8857942.html
Copyright © 2011-2022 走看看