Discuz common.js代码注释(三)
/** * 去除字符串左右两端的空格 */ function trim(str) { return (str + '').replace(/(\s+)$/g, '').replace(/^\s+/g, ''); } /** * 获取字符串长度(兼容IE:如果是IE,并且有换行符(\n)则替换为‘_’然后再计算长度) */ function strlen(str) { //获取字符串长度 return (BROWSER.ie && str.indexOf('\n') != -1) ? str.replace(/\r?\n/g, '_').length : str.length; } /** * 获取字符符串长度 */ function mb_strlen(str) { var len = 0; // 声明长度 for (var i = 0; i < str.length; i++) { //遍历str参数 len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1;//charCodeAt(i)>255是用来判断非常规字符的,如果是在 UTF-8编码下,一个汉字占3个字节,一个中文字符的占位是2个字节,英文字符是1个字节 } return len; //返回字符串长度 } /** * 将超过指定的最大长度(maxlen)以外的文字显示为dot(‘...’) */ function mb_cutstr(str, maxlen, dot) { var len = 0; //声明长度 var ret = ''; //声明返回值 var dot = !dot ? '...' : dot; //判断dot是否为空,如果为空dot默认为‘...’ maxlen = maxlen - dot.length; //获取最大长度和dot之间的长度值 for (var i = 0; i < str.length; i++) { //遍历目标字符str len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1; //如果是在 UTF-8编码下,一个汉字占3个字节,一个中文字符的占位是2个字节,英文字符是1个字节 if (len > maxlen) { //判断len是否大于最大长度 ret += dot; //如果大于最大长度则加上dot后跳出循环 break; //跳出循环 } ret += str.substr(i, 1); //每次获取一个字并拼接在ret后面 } return ret; //返回结果 } /** * 将str中匹配到search的值都替换为replace * 如果search、replace都为数组,则可理解为多替换 * 如果 search:['1','2']、replace:['a','b']这样的值,那么会将1替换成a,将2替换成b,如果search的长度大于replace,则默认替换为replace的第一个值 * search:正则; replace:需要替换的值(可以为数组); str:查找源; regswitch:正则的修饰符(可取值:‘i’、‘g’、‘ig’等) */ function preg_replace(search, replace, str, regswitch) { var regswitch = !regswitch ? 'ig' : regswitch; //设置修饰符,如果regswitch为空则默认值:'ig' var len = search.length; //获取search长度 for (var i = 0; i < len; i++) { //遍历len re = new RegExp(search[i], regswitch); //声明正则,并设置修饰符 //将str中匹配到re的值替换为replace,如果replace为string类型,则直接替换,如果为数组,则替换为当前replace中对应的值 str = str.replace(re, typeof replace == 'string' ? replace : (replace[i] ? replace[i] : replace[0])); } return str;//返回结果 }