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

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

获取字符串真实长度

常规的字符串长度获取方式是使用 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日

相关文章

  • JavaScript数组常用方法解析及数组扁平化

    首先我们来分别解析JavaScript数组常用方法和数组扁平化。 Part 1:JavaScript数组常用方法解析 JavaScript数组是一种非常常用的数据类型,有很多常用方法可以操作数组。以下是一些常用方法的详细解析: push():向数组的末尾添加一个元素 语法:array.push(element1, element2, …, element…

    JavaScript 2023年5月27日
    00
  • CodeReview常见的几个问题梳理解决示例

    关于Code Review常见的几个问题梳理解决示例,以下是完整攻略: 什么是Code Review? Code Review,即代码审查,是指在代码提交到仓库之前,由其他开发者对该代码进行仔细的检查和评估,以确保代码质量和稳定性,保证代码符合企业的开发标准和最佳实践,并能够接受其他开发者的审查和修改。 Code Review是软件开发过程中不可或缺的环节,…

    JavaScript 2023年5月27日
    00
  • 简单JS打造酷炫代码雨(黑客高逼格)

    下面详细讲解一下“简单JS打造酷炫代码雨(黑客高逼格)”的完整攻略。 1. 简介 代码雨是指电影《黑客帝国》中出现的电脑矩阵下落代码的场景。而在网络世界中,代码雨常被用来表示网站的高逼格,因此它成为了一种很流行的网页特效。而本文就是在介绍如何使用简单的JS代码来打造一个酷炫的代码雨效果。 2. 实现步骤 2.1 HTML结构 首先,我们需要在HTML中创建一…

    JavaScript 2023年6月11日
    00
  • vue使用fengMap速度慢的原因分析

    题目要求分析vue使用fengMap速度慢的原因,那么我们就需要具体分析vue与fengMap在集成和使用中可能存在的问题。以下是可能存在的原因和解决方法: 原因分析一:Vue组件过多 可能会存在vue组件过多导致页面渲染缓慢的问题。在使用fengMap时,我们需要引用fengMap的JS和CSS文件,同时使用fengMap提供的组件来完成我们需要的业务功能…

    JavaScript 2023年6月10日
    00
  • 深入理解javascript中的this

    深入理解JavaScript中的this的完整攻略 什么是this 所谓 this ,就是JavaScript中一个相对特殊的关键字,指向当前函数的执行环境。换句话说,this 可以看做是一个对象,这个对象指向的是函数执行时所在的环境对象,而这个环境对象是由调用方式来决定的。 this指向的典型情况 在JavaScript中,this 的指向是根据如何调用当…

    JavaScript 2023年6月10日
    00
  • 灵活掌握asp.net中gridview控件的多种使用方法(上)

    关于“灵活掌握asp.net中gridview控件的多种使用方法(上)”,我将从以下几个方面进行详细讲解: GridView控件的基本使用 翻页、排序和筛选功能的实现 多表联合查询结果展示 多数据源联合查询结果展示 下面我们分别来详细讲解。 1. GridView控件的基本使用 GridView控件是ASP.NET中最常用的数据展示控件之一。其基本用法如下:…

    JavaScript 2023年6月11日
    00
  • 仿豆瓣分页原型(Javascript版)

    让我们一步步来详细讲解“仿豆瓣分页原型(Javascript版)”的完整攻略。 1. 目标 在这个项目中,我们的目标是完成一个可以实现类似豆瓣电影列表分页的原型,包含如下功能: 页面展示电影列表 实现分页功能,可以翻页查看电影列表的不同页面 支持自定义每页显示的电影数量 2. 环境 完成这个项目我们需要一个web开发环境,下面列出了需要的工具和技术: HTM…

    JavaScript 2023年6月11日
    00
  • asp.net通过js实现Cookie创建以及清除Cookie数组的代码

    ASP.NET是一个Web应用程序框架,通过JavaScript可以创建Cookie并清除Cookie数组。下面是实现Cookie创建和清除Cookie数组的示例代码: 创建Cookie 要在ASP.NET网站中创建Cookie,我们可以使用JavaScript的document.cookie属性。下面是创建一个名为MyCookie,值为123的Cookie…

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