编写一个方法,格式化字符串:
原始字符串为:"哈哈ddd呵呵789哈哈88998哈.xls"
要求:'.xls'前面的字符串,最多保留中文字符9个,数字字母最多18个,从中间用...省略,保留末尾两个中文字符或4个字母数字。
比如,格式化后的字符串为:"哈哈ddd呵呵789...98哈.xls"
编写一个方法,格式化字符串:
原始字符串为:"哈哈ddd呵呵789哈哈88998哈.xls"
要求:'.xls'前面的字符串,最多保留中文字符9个,数字字母最多18个,从中间用...省略,保留末尾两个中文字符或4个字母数字。
比如,格式化后的字符串为:"哈哈ddd呵呵789...98哈.xls"
你的这个存在一些特殊情况的处理:
例如:如果最后四个字符是哈8哈
如何取等等
function normalize(str) {
str = str.split('.')[0];
var temp = [];
var sBuffer, bufferSize;
var result = '';
for (var i = 0, len = str.length; i < len; i++) {
//将所有的字符所占的字节数存储为一个数组
sBuffer = str.charCodeAt(i).toString(2);
bufferSize = sBuffer.length <= 7 ? 1 : sBuffer.length <= 15 ? 2 : 4;
temp.push(bufferSize);
}
//如果整个字符串长度小于18,直接返回
if (temp.reduce(function(prev, cur) {
return prev + cur
}) < 18) return str;
var flag1 = true,
flag2 = true;
//取前14个字符
temp.reduce(function(prev, cur, index) {
if (prev > 14 && flag1) {
flag1 = false;
result = str.slice(0, index - 1) + '...';
return prev;
} else {
return prev + cur;
}
});
//取后四个字符
temp.reduceRight(function(prev, cur, index) {
if (prev >= 4 && flag2) {
flag2 = false;
result += str.slice(index + 1) + '.xml';
return prev;
} else {
return prev + cur;
}
});
return result;
}
13 回答13.1k 阅读
7 回答2.2k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.2k 阅读
你在封装优化一下就好