JS版获取字符串真实长度和取固定长度的字符串函数

yizhihongxing

获取字符串真实长度和取固定长度的字符串函数,可以方便地进行字符串截取和限制。

获取字符串真实长度

常规的字符串长度获取方式是使用 str.length,但这种方式对于非 ASCII 字符(如中文、日文、韩文等)是不准确的,因为每个非 ASCII 字符占用的字节不同。解决这个问题的方法是使用 encodeURIComponent 将字符串编码为 URI 组件,然后获取其长度。

具体示例如下:

/**
 * 获取字符串真实长度
 * @param  {String} str 要计算长度的字符串
 * @return {Number}     字符串的真实长度
 */
function getRealLength(str) {
  return encodeURIComponent(str).replace(/%[A-F\d]{2}/g, 'U').length;
}

// 示例
getRealLength('Hello, 世界!'); // 14

在示例中,比较简单的是首先使用 encodeURIComponent 将字符串转换成 URI 组件。对于非 ASCII 字符,该函数会将其进行编码,如中文字符编码为 %E4%BD%A0%E5%A5%BD。接着使用正则表达式 /%[A-F\d]{2}/g 匹配所有编码后的字符串,将其替换为单个字符(此处使用了字符 U),最终得到编码后的字符串长度。

取固定长度的字符串

截取字符串是常见的需求,如果直接使用 substrsubstring 方法,会涉及到字符编码问题,容易造成乱码或半个字符的截取。为此,我们需要自己实现一个截取固定长度的字符串函数。

具体示例如下:

/**
 * 截取固定长度的字符串
 * @param  {String} str     要截取的字符串
 * @param  {Number} length  需要截取的长度
 * @param  {String} ellipsis 字符串结尾省略的符号,默认为 ...
 * @return {String}         截取后的字符串
 */
function cutString(str, length, ellipsis = '...') {
  let res = '',
      count = 0;

  for (let i = 0; i < str.length; i++) {
    const c = str.charAt(i);
    if (/[\u4e00-\u9fa5]/.test(c)) { // 判断是否是中文字符
      count += 2;
    } else {
      count += 1;
    }
    if (count > length) {
      break;
    }
    res += c;
  }

  return res + (count > length ? ellipsis : ''); // 添加省略号
}

// 示例
const str = "这是一段测试字符串,包含中文和英文的长度测试。";
cutString(str, 20); // 这是一段测试字符串
cutString(str, 10, '...'); // 这是一...

在示例中,我们先用 count 统计累计的字符长度。在遍历字符串时,对于中文字符我们将计数器加 2,其他字符加 1,这个方式可以避免截取出现半个中文字符的情况。最后将截取后的字符串加上省略号 ellipsis 返回。

注意,以上的截取方式是以某一字符长度为基准进行截取。如果需要保证截取结果精确地完整某个单词、句子或段落,可能需要进行进一步的判断和截取。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS版获取字符串真实长度和取固定长度的字符串函数 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Node.js 和 Python之间该选择哪个?

    当你需要选择一种服务器端开发语言时,Node.js 和 Python 都是不错的选择。它们都有广泛的应用和生态系统,但它们之间也存在一些区别。 1. Node.js vs Python:概述 Node.js Node.js 是一种使用 JavaScript 编写的服务器端运行环境。它采用事件驱动、非阻塞 I/O 模型,使得它非常适合构建高性能的 Web 应用…

    JavaScript 2023年5月28日
    00
  • JS中的Replace方法使用经验分享

    下面是关于“JS中的Replace方法使用经验分享”的攻略: 一、Replace方法的基本用法 Replace方法是JavaScript中内置的字符串处理函数,可以在一个字符串中找到一个指定的文本,并将其替换为另一个指定的文本。 以下是Replace方法的基本语法: string.replace(searchvalue, newvalue) 其中,searc…

    JavaScript 2023年6月10日
    00
  • Javascript 的addEventListener()及attachEvent()区别分析

    JavaScript 是一门用于网页前端开发的脚本语言,常常用于实现交互效果。而事件是页面上用户与页面交互时所发生的事情,例如用户单击、鼠标移动等。在 JavaScript 中,操作事件的方式主要有两种:addEventListener() 和 attachEvent()。本篇攻略将会对它们的区别进行分析与讲解。 addEventListener() add…

    JavaScript 2023年6月10日
    00
  • 利用location.hash实现跨域iframe自适应

    实现跨域iframe自适应的首要问题是通过JavaScript获取iframe的高度。然而,由于同源策略的限制,无法直接获取跨域iframe的高度。为了解决这个问题,我们可以利用iframe的hash值和window.location.hash属性。 具体实现步骤如下: 1.在iframe页面中设置hash值 在iframe页面中添加以下代码: // 获取i…

    JavaScript 2023年6月11日
    00
  • Three.js+React实现3D开放世界小游戏

    让我为您详细讲解“Three.js+React实现3D开放世界小游戏”的完整攻略。如下: 简介 Three.js是一个基于WebGL的JavaScript 3D库,提供了许多3D渲染的功能。React则是一个构建用户界面的JavaScript库,它可以使开发者更加方便地处理界面的状态和事件。 结合Three.js和React,我们可以实现一个3D开放世界小游…

    JavaScript 2023年6月11日
    00
  • 前端组件化基础知识详细讲解

    前端组件化基础知识详细讲解 什么是前端组件化 前端组件化,是一种将页面拆分成多个可重用组件的开发方式。这种方式将页面抽象为一系列具有独立功能和样式的小组件,而这些组件可以在不同的页面中重复使用和组合,实现了代码的复用和模块化。 组件的基本要素 在前端组件化中,组件是构成页面的基本单位。组件有三个基本要素: HTML 结构:组件必须被封装在一个 HTML 元素…

    JavaScript 2023年6月11日
    00
  • 教你JS中的运算符乘方、开方及变量格式转换

    教你JS中的运算符乘方、开方及变量格式转换 一、乘方运算 在JavaScript中,计算数字的乘方可以使用 Math.pow() 函数,该函数需要两个参数,第一个是底数,第二个是指数。例如: Math.pow(2, 3); // 计算2的3次方,结果为8 二、开方运算 在JavaScript中,计算数字的平方根可以使用 Math.sqrt() 函数,该函数需…

    JavaScript 2023年5月28日
    00
  • 跨站攻击之实现Http会话劫持的手法

    跨站攻击(Cross-Site Attack)又称为XSS攻击,是指攻击者在网页中插入恶意脚本,使受害者在访问网页时,网页中的恶意脚本被执行从而攻击受害者。跨站攻击有很多种形式,其中之一就是Http会话劫持,下面我们来看看这种手法的攻略。 什么是Http会话劫持 Http会话劫持是指攻击者在网站上注入一段代码,通过劫持用户已经建立的会话从而获取用户的权限、获…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部