js 字符串截取(包含中英文)

本文介绍了一种使用JavaScript实现的智能字符串截断方法,能够正确处理包含中文字符的字符串,并保持截断后的字符串完整性和阅读性。通过检测字符类型并调整截断长度,确保不会在中文字符中间截断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$(function(){
	debugger;
	var str ="我是大好人";
	var str = "1234567890";
	var len = 3;
	var a = subString(str, len);
	alert(a);
	function subString(str, len) {
		debugger;
        var newLength = 0;
        var newStr = "";
        var chineseRegex = /[^\x00-\xff]/g;
        var singleChar = "";
        var strLength = str.replace(chineseRegex, "**").length;
        for (var i = 0; i < strLength; i++) {
            singleChar = str.charAt(i).toString();
            if (singleChar.match(chineseRegex) != null) {
                newLength += 2;
            }
            else {
                newLength++;
            }
            if (newLength > len) {
                break;
            }
            newStr += singleChar;
        }
        return newStr;
	}
});
--          \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如, '\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。 

--          [^\x00-\xff]即ASCII 编码不在0-255的字符


--          检查是否是汉字或者全角
<script>
alert(/[^\x00-\xff]/g.test('abc'))
alert(/[^\x00-\xff]/g.test('表达'))
</script>

--           charAt() 方法可返回指定位置的字符。

第一个字符位置为 0, 第二个字符位置为 1,以此类推.


--           match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。


另一种写法

$(function(){
	debugger;
	var str ="我是大好人";
//	var str = "1234567890";
	var len = 5;
	var b = subString(str, len);
	alert(b);
	function subString(str, len) {
		debugger;
        var str_length = 0;
        var str_len = 0;
        str_cut = new String();
        str_len = str.length;
        for (var i = 0; i < str_len; i++) {
            var a = str.charAt(i);
            str_length++;
            if (escape(a).length > 4) {
                //中文字符的长度经编码之后大于4  
                str_length++;
            }
            if (str_length > len) {
            	break;
            }
            str_cut = str_cut.concat(a);
        }
        str_cut = str_cut.concat("...");
        return str_cut;
	}
});
escape(string)

返回值

已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。


实例

在本例中,我们将使用 escape() 来编码字符串:

<script type="text/javascript">

document.write(escape("Visit W3School!") + "<br />")
document.write(escape("?!=()#%&"))

</script>

输出:

Visit%20W3School%21
%3F%21%3D%28%29%23%25%26


function subString(str,len){  
        debugger;  
        var newlen = 0;  
        var newstr = "";  
        for ( var int = 0; int <str.length; int++) {  
            var a  = str.charAt(int);  
            newlen++;  
            if(escape(a).length>4){  
                newlen++;  
            }  
            if(newlen>len){  
                break;  
            }  
            newstr = newstr+a;  
        }
        if(newlen>len){
        	newstr = newstr+"...";  
        }
        return newstr;  
    }  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值