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日

相关文章

  • Java实现与JS相同的Des加解密算法完整实例

    使用Java语言实现与JS相同的Des加解密算法,需要注意以下几个步骤: 1. 导入Java支持JS的Des加解密库 在Java中,需要导入支持JS的Des加解密库,可以使用Bouncy Castle库,也可以使用官方提供的JCE库。 Bouncy Castle库 Bouncy Castle是一个Java密码学库,它包括对许多密码学算法的支持。使用Bounc…

    JavaScript 2023年5月28日
    00
  • JavaScript中String.match()方法的使用详解

    JavaScript中String.match()方法的使用详解 简介 JavaScript提供了很多方法操作字符串,其中String.match()是一种常用的方法。它可以在一个字符串中查找匹配一个正则表达式的内容,并返回匹配结果。 语法 String.match(regexp) 其中,regexp是一个正则表达式对象。 返回值 String.match(…

    JavaScript 2023年5月28日
    00
  • javascript如何创建对象

    创建对象在 JavaScript 中是一项重要的任务,以下是常用的四种方式来创建对象: 1. 对象字面量 对象字面量是创建 JavaScript 对象的一种简单方式,可以在代码中直接定义。定义对象字面量时需要使用花括号 {}。在花括号中,可以按照属性名称和对应的值的形式来定义对象的属性,多个属性之间使用逗号分隔。 let person = { name: ‘…

    JavaScript 2023年5月27日
    00
  • 关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法

    关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法,需要考虑以下几个方面: 了解什么是字符编码 字符编码是计算机在处理文本时采用的一种方式,用数字来代表各种字符,包括数字、字母、符号、汉字等等。字符编码的常见表示方式包括 ASCII、GB2312、GBK、UTF-8 等。 理解客户端与服务器端的字符编码要求 客户端和服务器端在处…

    JavaScript 2023年5月19日
    00
  • js获取dom的高度和宽度(可见区域及部分等等)

    要获取DOM元素的宽度和高度,我们可以使用JavaScript中的clientWidth和clientHeight属性。这两个属性返回的是DOM元素的可视区域大小,不包括边框和外边距。以下是获取DOM元素宽度和高度的代码: const element = document.getElementById(‘myElement’); const elementW…

    JavaScript 2023年6月10日
    00
  • js 获取html5的data属性实现方法

    获取HTML5的data属性实现方法 在HTML5中的data属性可以以简单且可读性高的方式为元素添加数据,但是在JavaScript中获取这些属性的值并不像其他一些属性那样直观。下面介绍几种方法来获取HTML5的data属性。 1. 使用getAttribute() 我们可以使用DOM的 getAttribute() 方法来获取HTML5的data属性。示…

    JavaScript 2023年6月10日
    00
  • JavaScript 实现網頁打印處理

    要在网页上实现打印功能,可以使用 JavaScript 来控制页面的打印行为。下面是一些实现网页打印的攻略: 1. 使用 window.print 方法 window.print() 是 JavaScript 的内置方法,用于打开浏览器的打印框架并弹出打印对话框。为了使打印结果更好的呈现,建议在打印前设置适当的 CSS 样式,以适应打印机的纸张格式。 示例 …

    JavaScript 2023年5月19日
    00
  • C#实现将javascript文件编译成dll文件的方法

    下面是详细讲解“C#实现将JavaScript文件编译成DLL文件的方法”的完整攻略: 1. 准备工作 在开始之前,你需要安装以下工具: Visual Studio(建议安装2019版本或更高版本) Jurassic 一个基于.NET的javascript解释器 2. 创建新的C#项目 打开Visual Studio,创建一个新的Class Library项…

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