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日

相关文章

  • Js判断参数(String,Array,Object)是否为undefined或者值为空

    要判断一个变量是否为undefined或者值为空,可以根据变量的类型采用不同的方法进行判断。 判断字符串类型变量是否为空 使用if语句结合||运算符对字符串类型的变量进行判断,示例代码如下: let str = ”; if (!str || str.trim().length === 0) { console.log(‘字符串为空’); } else { …

    JavaScript 2023年6月10日
    00
  • JavaScript常用脚本汇总(二)

    JavaScript常用脚本汇总(二) 前言 JavaScript 是一种用于网页交互式前端开发的编程语言。它为网站提供了动态效果,可以实现各种交互操作,增强用户体验。在本文中,我们将介绍一些 JavaScript 常用脚本。这些脚本可以方便地使用和集成到您的网站中。 脚本汇总 1. 返回顶部 以下脚本可以让用户快速返回到页面的顶部。调用该函数会滚动页面,锚…

    JavaScript 2023年5月18日
    00
  • JavaScript也谈内存优化

    JavaScript也谈内存优化 为什么要进行内存优化? JavaScript代码执行时会占用计算机的内存空间,当JavaScript代码执行完毕后,内存空间会被释放。但如果我们的代码存在内存泄漏等问题,那么内存空间就不会被释放,直到浏览器或者计算机崩溃。 而进行内存优化,则可以有效减少内存泄漏等问题的出现,让我们的代码更健壮、更高效地执行。 如何进行内存优…

    JavaScript 2023年5月28日
    00
  • vue跳转方式(打开新页面)及传参操作示例

    下面是一份详细的关于Vue跳转方式及传参操作的攻略。 Vue 跳转方式 在Vue中,可以通过 <router-link> 或 $router.push() 的方式进行页面跳转。 router-link <router-link> 是Vue-Router提供的路由导航组件,可以通过 to 属性指定要跳转的路由地址。 语法如下: <…

    JavaScript 2023年6月11日
    00
  • 对vue下点击事件传参和不传参的区别详解

    对Vue下点击事件传参和不传参的区别详解,主要涉及了在Vue模板中绑定事件并传递参数的方法。 不传参的情况 当我们在Vue模板中绑定一个事件时,如果没有传递任何参数,vue会通过默认的方式将事件对象event传递进去。示例如下: <template> <button @click="handleClick">不传参…

    JavaScript 2023年6月11日
    00
  • JavaScript实现网页带动画返回顶部的方法详解

    JavaScript实现网页带动画返回顶部的方法详解 当我们浏览很长的网页时,我们会发现有时候需要快速回到页面的顶部。通常,我们可以直接点击页面的滚动条或者键盘的 Home 键,但这种方式比较突兀。另外,很多时候我们需要一个能够流畅返回顶部的效果。在这里,我们将详细讲解使用JavaScript实现网页带动画返回顶部的方法。 实现步骤 实现网页带动画返回顶部的…

    JavaScript 2023年6月11日
    00
  • 简介JavaScript中charAt()方法的使用

    简介JavaScript中charAt()方法的使用 什么是charAt()方法? JavaScript中的charAt()是一个字符串方法,用于返回指定索引处的字符。索引从0开始,即第一个字符的索引为0,第二个字符的索引为1,以此类推。如果索引超过了字符串的长度,则返回空字符串。 如何使用charAt()方法? 使用charAt()方法的语法如下: str…

    JavaScript 2023年5月28日
    00
  • ES6新特性之类(Class)和继承(Extends)相关概念与用法分析

    下面是关于ES6中类(class)和继承(extends)的详细讲解: 什么是类(class) 类(class)是ES6中的一个新特性,是一种对象构造器,它可以通过类来创建对象,其语法定义如下: class MyClass { // 类的构造方法,当通过new关键字实例化类对象时,会调用这个方法来初始化对象的属性 constructor(args) { //…

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