/* * 截取指定字節長度的字符串 * 注:半角長度為1,全角長度為2 * str:字符串 * len:截取長度 * return: 截取后的字符串及是否截取的標記(擴展用)code=1 字符串截斷 code=0 字符串未截斷 */ function cutStrByte(str, len){ //校驗參數 if(!str || !len){ return {"cutStr":"","code":0}; } var code = "1",// 默認返回code值,已截斷 strLen = str.length,// 原字符串長度 cutStr; //如果字符串長度小於截取長度的一半,則返回全部字符串 if (strLen <= len/2){ cutStr = str; code = "0"; }else{ //遍歷字符串 var strByteCount = 0; for (var i = 0; i < strLen ; i++ ){ //中文字符字節加2 否則加1 strByteCount += getByteLen(str.charAt(i)); //i從0開始 截斷時大於len 只截斷到第i個 if(strByteCount > len){ cutStr = str.substring(0, i); break; }else if(strByteCount == len){ cutStr = str.substring(0, i + 1); break; } } } //cutstr為空,沒有截斷字符串 if (!cutStr){ cutStr = str; code = "0"; } return {"cutStr":cutStr, "code":code}; } /** * 獲取字節長度,全角字符兩個單位長度,半角字符1個單位長度 */ function getByteLen(val) { var len = 0; if(!val){ return len; } for (var i = 0; i < val.length; i++) { if(!val[i]){ continue; } // 全角 if (val[i].match(/[^\x00-\xff]/ig) != null){ len += 2; }else{ len += 1; } } return len; };