中英文及emoji表情字符串截断处理(一个中文2个英文)

26,586次阅读
没有评论

共计 1013 个字符,预计需要花费 3 分钟才能阅读完成。

前言

本文记录一下字符串处理,知识简单,可供参考。主要是字符串截取的相关知识,假如一个中文算两个字符,一个英文或者数字算一个字符,那么如何做字符串截取呢?特别是针对名字过长的时候,需要展示点点点,那么如何优雅的截取字符串呢?

简单方式

 const getByteVal=(val, max) =>{
    let returnValue = ''
    let byteValLen = 0
    for (let i = 0; i  max) {
        returnValue = returnValue + '...'
        break
      }
      returnValue += val[i]
    }
    return returnValue
  }

上面的方法可以针对中英文字符串截取,一个中文顶 2 个英文或者数字。但是假如字符串中有 emoji 标签等,例如和😊😂🤣,这种字符串,那么这种方法就会在截取字符串的时候会乱码。因为一个 emoji 表情算 2 个字符串,length 长度是 2,用长度 1 来累计相加,肯定是不对的。

最齐全的字符串截取方法

const  subStringEmoji =(substring, maxLen)=> {
    maxLen = maxLen || 10
    if (substring) {let str_cut = new String()
      let str_length = 0

      for (var i = 0; i = 0 && hs  1) {var ls = substring.charCodeAt(i + 1)
            var uc = (hs - 0xd800) * 0x400 + (ls - 0xdc00) + 0x10000
            if (0x1d000  1) {var ls = substring.charCodeAt(i + 1)
          if (ls == 0x20e3) {
            str_length += 2
            a = substring.substring(i, i + 2)
            i += 2
          } else {a = substring.substring(i, i + 1)
            i++
            str_length += 2
          }
        } else {if (0x2100  maxLen) {str_cut = str_cut.concat('...')
          break
        } else {str_cut = str_cut.concat(a)
        }
      }
      return str_cut
    }
    return ''
  }

这种方式截取字符串,中英文及 emoji 表情,全字符串截取。利用 Unicode 方式来实现。

扩展

关于 emoji 表情,其实也是有一些正则判断的,我之前文章有写过,JavaScript RegExp 常用的手机和邮箱正则 (常用正则),关于 emoji 表情正则,特殊字符正则等等,都有。

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计1013字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)