JS实现含有中文字符串的友好截取功能分析

yizhihongxing

让我来详细讲解一下 "JS实现含有中文字符串的友好截取功能分析" 的完整攻略。

1. 背景

在前端开发中,经常需要对文本进行截取展示,但是如果直接使用JS自带的字符串截取方法,会出现截取中文时的问题。因为中文字符在计算机中占用两个字节,如果按照字节截取,就会出现乱码或者截取到半个中文的情况。因此,我们需要对字符串截取封装一个方法,可以实现友好的中英文截取,而不会影响字符串的完整性。

2. 加载第三方插件或工具库

两个主流的工具库提供了字符串截取的函数,并且针对中英文截取都有优秀的解决方案。这两个工具库分别是:LodashSubstring.slice() 方法。在使用前需要先引入对应的文件或依赖。

以Lodash为例:

<script src="https://cdn.bootcss.com/lodash.js/4.17.11/lodash.min.js"></script>

3. 实现友好的中英文字符串截取方法

/**
 * 中英文混合字符串的截取
 * @param {string} str - 待截取的字符串
 * @param {number} len - 截取的长度
 * @returns {string} 返回截取后的字符串
 */
function cutString(str, len) {
  // 如果字符串为空或长度为0,直接返回空字符串
  if (!str || !len) {
    return '';
  }
  // 将正则表达式表示为任何非英文或数字字符或非标点符号字符的字符
  const regex = /[^\x00-\xff]|\w|\d|\s+/g;
  // 迭代计算截取子串的真实长度
  let count = 0;
  let subString = '';
  for (let i = 0; i < str.length; i++) {
    const nowChar = str.charAt(i);
    // 使用正则表达式测试当前字符是否为非英文或数字字符或非标点符号字符的字符
    const isMatch = regex.test(nowChar);
    if (isMatch) {
      count += 2;
    } else {
      count += 1;
    }
    if (count <= len) {
      subString += nowChar;
    } else {
      break;
    }
  }
  return subString;
}

上述方法实际上是通过循环一个字符串,通过正则表达式识别中英文字符的宽度,将每一个字符对应的宽度计算在内,最后生成子字符串。

4. 示例展示

具体应用场景中,可以如下展示:

const str = '这是一个混合字符串,中文和English都包含在其中。This is a mixed string, it contains both Chinese and English.';
// 使用Lodash库提供的_.truncate()方法
const shortStr1 = _.truncate(str, { length: 16 });
console.log(shortStr1); // 这是一个混合字符...
// 使用自定义的cutString()方法
const shortStr2 = cutString(str, 16)
console.log(shortStr2); // 这是一个混合字...

上述示例中,分别使用了Lodash库提供的方法和自定义的方法实现随意截取字符串并保证完整性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现含有中文字符串的友好截取功能分析 - Python技术站

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

相关文章

  • js中闭包结合递归等于柯里化原理解析

    下面是关于”js中闭包结合递归等于柯里化原理解析”的详细讲解。 什么是闭包 闭包是指一个函数能够访问并操作其外部作用域中的变量,即使这些变量已经超出了当前作用域的范围。在JavaScript中,函数是一等公民,可以作为变量、参数、返回值传递。闭包就是Javascript中的一个重要概念,因为它能够让我们在代码编写上更加灵活。 什么是递归 递归是指一个函数在其…

    JavaScript 2023年6月10日
    00
  • JavaScript装饰器函数(Decorator)实例详解

    JavaScript装饰器函数(Decorator)实例详解 理解装饰器 JavaScript装饰器是ES2016的新提案之一,它是一个函数,可以被用于修改类的行为。 一个装饰器可以被认为是一个具有固定签名(接受不同数量和类型的参数)的函数,它的第一个参数是被装饰的函数或类。 装饰器主要有两种应用:- 类装饰器: 用于修改类的定义- 方法装饰器: 用于修改类…

    JavaScript 2023年5月27日
    00
  • JavaScript中常见的字符串操作函数及用法汇总

    JavaScript中常见的字符串操作函数及用法汇总 JavaScript中有很多字符串操作函数,这篇攻略将会讲解其中常见的一些函数及其用法。我们来详细了解一下吧。 字符串的创建 字符串可以通过两种方式创建,分别是双引号和单引号。 var str1 = "JavaScript"; // 使用双引号创建字符串 var str2 = ‘Jav…

    JavaScript 2023年5月19日
    00
  • javascript实现点击单选按钮链接转向对应网址的方法

    这里为您讲解一下“javascript实现点击单选按钮链接转向对应网址的方法”的攻略: 1. HTML 结构 首先,需要在 HTML 中添加单选按钮和链接的结构,例如: <input type="radio" name="link" value="https://www.example.com/1&qu…

    JavaScript 2023年6月11日
    00
  • Java编程之如何通过JSP实现头像自定义上传

    下面是详细讲解关于Java编程如何通过JSP实现头像自定义上传的完整攻略。 简介 在现代社交网络和互联网应用程序中,用户的头像很重要。头像可以为应用程序的用户界面和用户个人信息提供额外的信息。本文将讨论如何利用Java编程语言和JSP技术实现头像自定义上传。本文将具体介绍如何实现头像上传到服务器和生成预览图像。我们还将使用jQuery库向服务器发送Ajax请…

    JavaScript 2023年6月11日
    00
  • 通过正则表达式实现表单验证是否为中文

    下面我将详细讲解通过正则表达式实现表单验证是否为中文的完整攻略。 步骤一:编写正则表达式 中文字符的 unicode 编码范围为 \u4e00-\u9fa5,因此我们可以使用这个范围来编写正则表达式,在输入框中输入/[\u4e00-\u9fa5]/即可完成验证是否为中文。 步骤二:根据正则表达式验证表单 在 Javascript 中,我们可以使用 test(…

    JavaScript 2023年6月10日
    00
  • js前端传json后台接收‘‘被转为quot的问题解决

    当前端使用 JavaScript 将 JSON 对象发送到后台时,有时可能会遇到 JSON 字符串中的双引号被转换为 &quot; 实体的问题,这可能会导致后端无法正确解析 JSON 字符串的情况。下面是解决这个问题的攻略: 1. 从前端开始 首先,确保前端代码正确地生成了 JSON 字符串,不应该使用任何 HTML 实体序列化。例如,以下代码可能会…

    JavaScript 2023年5月27日
    00
  • Javascript实现倒计时时差效果

    实现倒计时时差效果可以通过Javascript编写代码来实现。以下是详细的步骤: 1. HTML结构 首先需要在HTML文件中定义一个元素用于显示倒计时,例如: <div class="countdown-timer"></div> 2. CSS样式 接下来需要为元素添加一些CSS样式,用于设置显示倒计时的样式,例…

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