Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >前端-js截取字符串

前端-js截取字符串

作者头像
grain先森
发布于 2019-03-29 02:46:34
发布于 2019-03-29 02:46:34
5.7K0
举报
文章被收录于专栏:grain先森grain先森

Hi,大家好,我是你们的grain先森,好久没有分享自己的文章啦!甚是想念你们!

今天我要跟大家分享的是js截取字符串。遇到这样的问题,大家可能选择直接百度,但是百度到的方法,有些却不尽你意,小编也是遇坑之后,想想还是自力更生吧,现在整理出来分享给大家。

话不多说啦,就是上干货。

一、需求场景

大家在平时的开发中,肯定会遇到“某些字符超过多少字截断,并显示...”的需求,特别是在移动端,碍于屏幕尺寸的限制,某些“昵称”,“备注”等等字段,经常会让截断,后面跟着仨点。

1、纯汉字或纯英文字符串

直接用slice、substr、substring、splice等方法就可以直接按照需求截断,这里不做解释啦,当然我下面介绍的方法也可以实现。

2、中英文组合、表情的字符串

这才是咱们今天的主角

二、代码片段

代码语言:javascript
AI代码解释
复制
     /**	* @获取字符串字节长度	* @param {String} str	* @returns	*/	function getStrLen (str) {		let len = 0;		for (let i = 0; i < str.length; i++) {			let currLen = str.charCodeAt(i);			if (currLen >= 0 && currLen <= 128) {				len += 1;			} else {				len += 2;			}		}		return len;	}

     /**	* @截取指定长度的字符串,超出部分显示指定字符	* @param {*} name	* @param {number} [len=8]	* @param {string} [endStr="..."]	* @returns	*/	function cutOffStr (name, len = 8, endStr = "...") {		// 小于等于指定长度		if (getByteLen(name) <= len) return name;				// 超出指定长度		let formatName = '';		let strLen = 0;		for (let i = 0; i < name.length; i++) {			strLen += getByteLen(name[i]);			if (strLen <= len) {				formatName += name[i];			} else {				break;			}		}		return formatName + endStr;	}

三、代码分析

首先,我要知道当前的字符串有多少个字节(不知道位、字节、字符、字符串的可以自行百度);

其次,通过charCodeAt()方法获取某个字符的Unicode编码(后面有解释)。本方法中ASCII小于等于128的算一个字节,大于128的则算作两个字节,也即,一个英文字符、数字等算一个字节,一个汉字、表情等算两个字节。这样可以知道一个字符串的长度;

接着,截断字符串,先判断字符串长度是否小于等于指定长度,是,则直接原样返回,否则,继续下一步;

最后,要实现按指定长度截断,就必须对每个字符进行判断是几个字节,对未超出指定长度的字符进行累加,直至超出指定长度,循环终止,返回截断后的字符串,达到需求。

:charCodeAt()方法可返回指定位置的字符的 Unicode 编码,这个返回值是 0 - 65535 之间的整数。开头的128个Unicode编码单元和ASCII字符编码一样。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.12.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
php截取字符串几个实用的函数
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说php截取字符串几个实用的函数,希望能够帮助大家进步!!!
Java架构师必看
2022/01/13
1.4K0
go语言截取字符串的写法
在 JavaScript 中,字符串可以被视为 UTF-16 编码的字符序列(每个字符占用 2 字节,但某些 Unicode 字符如 Emoji 可能占用 4 字节)。JavaScript 提供了多种方式来截取字符串,包括按字符位置截取和按字节位置截取(需要额外处理)。以下是详细实现:
用户1476826
2025/08/11
1830
一个面试题:截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串
该文摘要总结:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
片刻
2018/01/05
1.5K0
python基础-字符串与编码
转载于:廖雪峰的官方网站-python教程 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。 由于计算机
昱良
2018/04/08
1.1K0
python基础-字符串与编码
获得定长字符串
        C#中的字符串是Unicode编码,length是Unicode的Char的个数。所以,假如一个字符串中中英文混杂,又想获得一个固定宽度的字符串,就比较麻烦。单纯转换成字节再截取难免会碰到半个汉字的问题。         下面实现了这样的功能,返回固定字节长度的字符串,如果发生截断,后面补充2个或者3个“.”,根据截断点的位置决定。 /// <summary>         /// 返回定长的字符串,如果发生截取,在后面补充两个或三个"."         /// Author:jetz
用户1075292
2018/01/23
8920
JS判断字符串长度(英文占1个字符,中文汉字占2个字符)
//计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: String.prototype.gblen = function() { var len = 0; for (var i=0; i<this.length; i++) { if (this.charCodeAt(i)>127 || this.charCodeAt(i)==94) { len += 2; } else {
用户1065635
2019/11/27
9.6K0
Go 数据类型篇(三):字符串使用入门及底层字符类型编码详解
在 Go 语言中,字符串是一种基本类型,默认是通过 UTF-8 编码的字符序列,当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节,比如中文编码通常需要 3 个字节。
学院君
2023/03/03
1.4K0
Go 数据类型篇(三):字符串使用入门及底层字符类型编码详解
JS字符串分割截取
功能:返回指定位置的字符。字符串中第一个字符的下标是 0。如果参数 index 不在 0 与 string.length 之间,该方法将返回一个空字符串。
全栈程序员站长
2022/08/10
8.3K0
Python学习(五)Python len()函数获取字符串长度或字节数
Python 中,要想知道一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节,可以使用 len 函数。
用户7886150
2021/01/10
3.3K0
[oeasy]python0071_字符串类型_str_string_下标运算符_中括号
oeasy
2023/07/07
2270
[oeasy]python0071_字符串类型_str_string_下标运算符_中括号
关于字符串截取问题简单说明
  过去常常为这么一个问题所困惑,那就是我们在平时截取字符串时:一般情况是我们就直接用.substring()来截取,这样做有一个很大的问题(汉子和字母数字的截取问题),一个汉字代表两个字符,而一个字母和数字代表一个字符,这样通过substring()来截取就有会导致因为数字和字母截取后的长度会不理想。
小小许
2018/09/20
6450
python字符串编码
  python 2.x默认的字符编码是ASCII,默认的文件编码也是ASCII。
py3study
2020/01/20
2.4K0
Java字符串按照字节数进行截取
本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/178
joshua317
2021/10/29
1.5K0
Java字符串按照字节数进行截取
php截取字符串函数
1 public function sub_string($str, $len, $charset="utf-8") 2 { 3 if( !is_numeric($len) or $len <= 0) {//如果截取长度小于等于 4 return ""; //返回空 5 } 6 $sLen = strlen($str); //获取原始字串长度 7 if( $len >= $sLen ) { //如果截取长度大于总字符串长度 8
WindWant
2020/09/11
1.6K0
JavaScript|计算字符串的字节数
问题中提到计算字节数,首先需要对字节进行了解,Byte数是一个单位计量数值,其中字符串中单个的字符(英文、数字、特殊字符等)为一个字节,中文汉字是两个字节。
算法与编程之美
2020/07/28
4.7K0
python--一文搞懂字符串的编解码
我们在使用python处理中文字符串时总会遇到一些问题,特别是一些老项目需要用到python2,中文显示乱码,文件读写异常等问题时常发生。
languageX
2023/05/04
1.9K0
《快学 Go 语言》第 7 课 —— 冰糖葫芦串
字符串通常有两种设计,一种是「字符」串,一种是「字节」串。「字符」串中的每个字都是定长的,而「字节」串中每个字是不定长的。Go 语言里的字符串是「字节」串,英文字符占用 1 个字节,非英文字符占多个字节。这意味着无法通过位置来快速定位出一个完整的字符来,而必须通过遍历的方式来逐个获取单个字符。
老钱
2018/12/17
5220
【Go】高效截取字符串的一些思考
最近我在 Go Forum 中发现了 [SOLVED] String size of 20 character 的问题,“hollowaykeanho” 给出了相关的答案,而我从中发现了截取字符串的方案并非最理想的方法,因此做了一系列实验并获得高效截取字符串的方法,这篇文章将逐步讲解我实践的过程。
thinkeridea
2019/11/04
1.8K0
有趣的面试题:Go语言字符串的字节长度和字符个数
其实这并不是一道面试题,是我在日常开发中遇到的一个问题,当时场景是这样的:后端要对前端传来的字符串做字符校验,产品的需求是限制为200字符,然后我在后端做校验时直接使用len(str) > 200来做判断,结果出现了bug,前端字符校验没有超过200字符,调用后端接口确一直是参数错误,改成使用len([]rune(str)) > 200成功解决了这个问题。具体原因我们在文中揭晓。
Golang梦工厂
2022/07/08
7110
有趣的面试题:Go语言字符串的字节长度和字符个数
C#字符串(字节)的长度
顺便看一下Sql Server中char nchar varchar  nvarchar
aehyok
2018/09/11
5.8K0
C#字符串(字节)的长度
推荐阅读
相关推荐
php截取字符串几个实用的函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档