$(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;
}