84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
编写一个方法,格式化字符串:
原始字符串为:"哈哈ddd呵呵789哈哈88998哈.xls" 要求:'.xls'前面的字符串,最多保留中文字符9个,数字字母最多18个,从中间用...省略,保留末尾两个中文字符或4个字母数字。 比如,格式化后的字符串为:"哈哈ddd呵呵789...98哈.xls"
学习是最好的投资!
// 原始字符串为:"哈哈ddd呵呵789哈哈88998哈.xls" // 要求:'.xls'前面的字符串,最多保留中文字符9个,数字字母最多18个,从中间用...省略,保留末尾两个中文字符或4个字母数字。 // 比如,格式化后的字符串为:"哈哈ddd呵呵789...98哈.xls" // 我的理解为中英文混排不超过18个字符(中文算两个,英文算一个) // 所以结果为 哈哈ddd呵呵789哈哈...98哈.xls // 判断是否为中文 function isChinese(temp) { var re = /[^\u4E00-\u9FA5]$/; if (re.test(temp)) return false; return true; } var str = "哈哈ddd呵呵789哈哈88998哈.xls" // 另一种情况 不满18个字符的 // var str = "哈哈ddd呵呵.xls" var processStrArr = str.split('.')[0].split('') // 取出前几位 var headerIndex var header = 0 for (var i=0;i
你在封装优化一下就好
你的这个存在一些特殊情况的处理:例如:如果最后四个字符是哈8哈如何取等等
哈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; }
我写一个函数,如果有问题请反馈.
https://jsfiddle.net/rzcvjfx6/
你在封装优化一下就好
你的这个存在一些特殊情况的处理:
例如:如果最后四个字符是
哈8哈
如何取等等我写一个函数,如果有问题请反馈.
https://jsfiddle.net/rzcvjfx6/