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));

  • 相关阅读:
    WSL配置c语言环境
    vue无法获取$store中的变量
    接口自动化中全局参数以及用例信息
    正则表达式
    vue-i18n web 前端国际化
    elementui默认样式修改的问题
    setTimeOut的使用以及this指向问题
    elementui 在表格表头里面添加按钮
    各种
    element ui tabs标签页动态增加标签页,标签页引用组件
  • 原文地址:https://www.cnblogs.com/gopark/p/8857942.html
Copyright © 2011-2022 走看看