JavaScript截取中英文字符串

自定义原生方法实现
服务器君一共花费了152.280 ms进行了4次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

有时在显示某段文字的时候,可能会太长,影响我们页面的显示效果。如果仅是英文,那么我们可以用String.substring(start, end)函数就已经够用了。但是通常我们都会遇到既有英文,又有汉字的情况。而汉字是占用2个字节的,如果用String.substring(start, end)截取字符串的话,会发现汉字截取后比英文截取后个数虽然相同,但是长度还是长出去不少(具体要视字符个数来决定)。

下面是一个实现这个功能的函数:

<script language="javascript" type="text/javascript">  
var str = "欢迎访问简明现代魔法";
document.write( cutstr(str, 8) );

//js截取字符串,中英文都能用  
//如果给定的字符串大于指定长度,截取指定长度返回,否者返回源字符串。  
//字符串,长度  
  
/** 
 * js截取字符串,中英文都能用 
 * @param str:需要截取的字符串 
 * @param len: 需要截取的长度 
 */  
function cutstr(str,len)  
{  
	var str_length = 0;  
	var str_len = 0;  
	str_cut = new String();  
	str_len = str.length;  
	for(var i = 0; i < str_len; i++)  
	{  
		a = str.charAt(i);  
        str_length++;  
        if(escape(a).length > 4)  
        {  
         	//中文字符的长度经编码之后大于4  
         	str_length++;  
   		}  
    	str_cut = str_cut.concat(a);  
    	if(str_length>=len)  
     	{  
   			str_cut = str_cut.concat("...");  
         	return str_cut;  
      	}  
	}  
    //如果给定字符串小于指定长度,则返回源字符串;  
    if(str_length < len){  
     	return  str;  
	}  
}  
</script>  

也可以使用自定义JavaScript原生方法来实现。

<script language="javascript" type="text/javascript">  

//计算字符串长度
String.prototype.strLen = function() {
	var len = 0;
	for (var i = 0; i < this.length; i++) {
		if (this.charCodeAt(i) > 255 || this.charCodeAt(i) < 0) len += 2; else len ++;
	}
	return len;
}

//将字符串拆成字符,并存到数组中
String.prototype.strToChars = function(){
	var chars = new Array();
	for (var i = 0; i < this.length; i++){
		chars[i] = [this.substr(i, 1), this.isCHS(i)];
	}
	String.prototype.charsArray = chars;
	return chars;
}
 
//判断某个字符是否是汉字
String.prototype.isCHS = function(i){
	if (this.charCodeAt(i) > 255 || this.charCodeAt(i) < 0) 
		return true;
	else
		return false;
}

//截取字符串(从start字节到end字节)
String.prototype.subCHString = function(start, end){
	var len = 0;
	var str = "";
	this.strToChars();
	for (var i = 0; i < this.length; i++) {
		if(this.charsArray[i][1])
			len += 2;
		else
    		len++;
		if (end < len)
     		return str;
		else if (start < len)
			str += this.charsArray[i][0];
	}
	return str;
}

//截取字符串(从start字节截取length个字节)
String.prototype.subCHStr = function(start, length){
	return this.subCHString(start, start + length);
}

var str = "欢迎abc访问简明现代魔法";

var str1 = str.subCHStr(0, 9); 
//var str2 = str.subCHStr(2, 4); 
//alert(str1 + " == " + str2);

document.write( str1 );
</script>  

具体使用很简单,跟String.subString(start, end)一样使用就可。比如:

var str = "欢迎abc访问简明现代魔法"; 
var str1 = str.subCHStr(2, 2); 
var str2 = str.subCHString(2, 4); 
alert(str1 + " == " + str2);

本文地址:http://www.nowamagic.net/librarys/veda/detail/202,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/202

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《高性能JavaScript》 Nicholas C. Zakas (作者), 赵泽欣 (合著者), 丁琛 (译者)

《高性能JavaScript》揭示的技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM 交互、页面生存周期等。雅虎的前端工程师 Nicholas C. Zakas 和其他五位 JavaScript 专家介绍了页面代码加载的最佳方法和编程技巧,来帮助你编写更为高效和快速的代码。你还会了解到构建和部署文件到生产环境的最佳实践,以及有助于定位线上问题的工具。如果你使用 JavaScript 构建交互丰富的 Web 应用,那么 JavaScript 代码可能是造成你的Web应用速度变慢的主要原因。

更多计算机宝库...