js截取指定字节长度的字符串
默认的截取字符串都是根据字符长度或位置截取的,典型的两个方法是substr和substring。
这样导致的问题是截取同样长度的字符串时,多字节字符(汉字等)和单字节字符(半角英文字母、半角数字)占的位置长度差距较大,视觉上不太美观,比如同样是10个字符:
壹贰叁肆伍陆柒捌玖拾
abcdefghih
好了,上代码了,下面是自己写的根据指定字节长度截取字符串的函数:
/*
* param str 要截取的字符串
* param L 要截取的字节长度,注意是字节不是字符,一个汉字两个字节
* return 截取后的字符串
*/
function cutStr(str,L){
var result = '',
strlen = str.length, // 字符串长度
chrlen = str.replace(/[^\x00-\xff]/g,'**').length; // 字节长度 if(chrlen<=L){return str;} for(var i=0,j=0;i<strlen;i++){
var chr = str.charAt(i);
if(/[\x00-\xff]/.test(chr)){
j++; // ascii码为0-255,一个字符就是一个字节的长度
}else{
j+=2; // ascii码为0-255以外,一个字符就是两个字节的长度
}
if(j<=L){ // 当加上当前字符以后,如果总字节长度小于等于L,则将当前字符真实的+在result后
result += chr;
}else{ // 反之则说明result已经是不拆分字符的情况下最接近L的值了,直接返回
return result;
}
}
} // 用例
alert(cutStr("测试1字符串哈哈哈哈",10));
alert(cutStr("abcdefghigklmn",10));
编码这东西一直让人挺害怕的,总觉得迷迷糊糊的,代码中有不对的地方欢迎指正,或者有什么现成的函数或更简单的方法也请大牛指点一下。
谢谢!
js截取指定字节长度的字符串的更多相关文章
- js 截取指定字符长度 为数组
		
str要截取的字符 n截取个数 function jiequ(str,n) { var strArr = []; for (var i = 0, l = s ...
 - C#与JS实现 获取指定字节长度 中英文混合字符串 的方法
		
平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错. 尤其是插入中英文混合字符串时,SQL Server中一般中文要 ...
 - String截取字符串的指定字节长度
		
/** TODO:截取字符串的指定字节长度 * @Author wenjing * @Date 11:02 2019/5/15 * @Param [str, bengin, end] * @retur ...
 - C# 汉字的字符串截取指定字节的长度
		
int index = 0; int setCharCount = 74; string str1 = "三星 SCH-I829 电信3G手机(优 ...
 - python读取指定字节长度的文本
		
软件版本 Python 2.7.13; Win 10 场景描述 1.使用python读取指定长度的文本: 2.使用python读取某一范围内的文本. Python代码 test.txt文本内包含的 ...
 - delphi按字节长度分割字符串函数(转)
		
此字符串分割函数用delphi编写,可以适应字符串中存在双字节字符和单字节字符. function TricheditEfm.SplitString(source:string;Sleng:Integ ...
 - JS截取,删除,替换字符串常用方法详细
		
删除和替换是一样的,开始用的是,如果是删除就直接替换为空 arr="abc001abc002abc003" arr.replace('abc','123') 结果发现只能替换第一个 ...
 - mysql 截取指定的两个字符串之间的内容(locate,substring)
		
如需转帖,请写明出处 http://blog.csdn.net/slimboy123/archive/2009/07/30/4394782.aspx 今天我同事在用mysql的时候,需要对一个字符串中 ...
 - java字符串截取指定下标位置的字符串
		
public class A { public static void main(String[] args) { //定义的字符串 String s = "Hello World" ...
 
随机推荐
- Java之NIO传输数据
			
NIO可谓陈词旧调,不值一提. 但之前都是泛泛而谈, 现在深入应用才知道秘诀所在. 对于SocketChannel有read()与write(),但由于"非阻塞IO"本质, 这二个 ...
 - Effective Objective-C 2.0之Note.01
			
1.在类的头文件中尽量少引入其他头文件 除非确有必要,否则不要引入头文件.一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件.这样做可以尽量降低类之间的耦合(co ...
 - Call C# in powershell
			
How to call C# code in powershell Powershell Command Add-Type usage of Add-Type we use Add-Type -Typ ...
 - KinectStudio使用教程
			
在Kinect SDK 2.0安装结束之后,会有一个KinectStudio的调试工具,他可以将动作记录下,以后即便脱离了Kinect传感器也可以愉快的调试了.现在我们来看看如何使用 首先打开Kine ...
 - Teamwork——Week 4 Daily Scrum Meeting#1 2013.10.23
			
一.会议议题 1)根据确立的项目题目,进一步明确PM,DEV,TEST的工作. 2)确定团队分工和预估项目时间. 3)完成项目架构NABC模型. 4)确定第一轮开发团队分工 二.会议时间 2013年1 ...
 - jQuery中ready与load事件
			
jQuery中ready与load事件(来自慕课网) jQuery有3种针对文档加载的方法 $(document).ready(function() { // ...代码... }) //docume ...
 - JIRA安装过程中链接mysql的问题!
			
测试下我使用的是mysql7.5的版本,JIRA是6.3.6!这是版本引起的问题! 服务器上原生的mysql驱动jar包:Mysql-connector-java-5.1.18-bin 可参考:htt ...
 - 【python】正则表达式
			
参考资料:http://deerchao.net/tutorials/regex/regex.htm 1.正则表达式基础 2.python 正则表达式 1.正则表达式基础 元字符: 其他语法: (1) ...
 - 设计模式之观察者模式(Observer)
			
观察者模式原理:当有新的消息产生时发送给观察者,和中介者模式的不同地方是中介者模式强调中介的作用以及中介双方的交互,观察者模式是主动调用观察者成员函数进行消息发送. 代码如下: #include &l ...
 - IDA*
			
模拟退火 基本思路(Main Thoughts): IDA*是一种优秀的搜索法,在一般的实际问题中,它比普通的搜索更快. 通过迭代加深和估价函数剪枝来搜索. 通常处理没有层数上界或上界很多大的搜索. ...