工作中常用的JS函数整理分享(欢迎大家补充)
程序员文章站
2022-07-04 23:48:13
今年在渣X工作整理的常用JS函数 今年来了渣X工作,我所在这个部门分工很奇怪,CSS竟然有专门的人在搞,开发PHP的人员需要处理JS,以至于有时候开发起来不是那么得心应手,感觉把JS和CSS拆开就像是把方向盘、油门分别交给了两个人来控制,两个人都很不得劲。再说说这边的js吧,完全是那种复制粘贴的方式 ......
今年在渣X工作整理的常用JS函数
今年来了渣X工作,我所在这个部门分工很奇怪,CSS竟然有专门的人在搞,开发PHP的人员需要处理JS,以至于有时候开发起来不是那么得心应手,感觉把JS和CSS拆开就像是把方向盘、油门分别交给了两个人来控制,两个人都很不得劲。再说说这边的js吧,完全是那种复制粘贴的方式,更别说使用什么新的前端工具来进行各种优化了。到目前为止,我做了一件事情,将公共常用的JS拆出来,避免复制粘贴去使用,提高开发效率、提高代码鲁棒性。但还是拿出来分享给大家,顺便记录下。
基础工具Tools
/path/to/Tools.js
"use strict"; function Tools(){ };
正则批量替换
正则批量替换,支持多组规则。
/** * * @param string str 待处理的字符串 * @param array trans 要替换的规则列表 * @return string 替换之后的字符串 */ Tools.prototype.regA2B = function(str, trans) { var i, re, to; for (i in trans) { re = trans[i][0]; to = trans[i][1]; str = str.replace(re, to); } return str; };
看看下面的例子
var str = " 你好 ;‘’“”()——,\n\n"; var formatStr = tools.regA2B(str, [ [/^\s+|\s+$/gm, ""], [/(\r\n)|(\t)/gm, ""], [/(/gm, "("], [/)/gm, ")"], [/“|”/gm, "\""], [/‘|’/gm, "'"], [/,/gm, ","], [/;/gm, ";"], [/:/gm, ":"], [/——/gm, "-"] ]); console.log(formatStr);
上面的例子输出你好 ;''""()-,
,这里一定要注意替换的顺序,会按照参数trans中数组的顺序依次替换。
字符串格式化
格式换字符串中的制定变量
/** * * @param string str 带格式换变量 * @param Object formats 替换变量的映射 * @return string 替换之后的字符串 */ Tools.prototype.formatString = function(str, formats) { var i, re; for (i in formats) { re = new RegExp("\\{" + i + "\\}", "gm"); str = str.replace(re, formats[i]); } return str; };
看例子:
var str = "你好{name},我今年{age}岁"; var formatStr = tools.formatString(str, { name: "叶荣添", age: 26 }); console.log(formatStr);
上面的例子输出你好叶荣添,我今年26岁
。
获取链接参数
从浏览器地址栏中的链接或制定链接中获取参数的值
/** * 从浏览器链接参数中获取参数值 * * @param string name 待获取的参数名 * @param undefined|string url 制定链接 * @return string|null */ Tools.prototype.getQueryString = function(name, url) { url = typeof(url) != "string" ? window.location.search : url; var reg = new RegExp("(\\?|&)" + name + "=([^&]*)(&|$)", "i"); var r = url.match(reg); if (r != null) { return decodeURIComponent(r[2]); } else { return null; } };
看例子
var url = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0"; var val = tools.getQueryString("ie", url); console.log(val);
上面的例子输出utf-8
格式化URL参数
格式化URL参数,可以给URL中添加参数和修改参数
/** * @param string url 待处理的URL * @param object params 要设置的参数映射map * @param bool isEncode 是否使用encodeURIComponent对参数进行编码 * @return string 处理之后的url */ Tools.prototype.formatUrlParams = function(url, params, isEncode) { var splitByHash, pureUrl, hashInfo = "" , i, reg; if(typeof(isEncode) == "undefined") { isEncode = true; } // 参数校验 if (typeof(url) != "string") { throw "要格式化的url必须是字符串"; } splitByHash = url.split("#"); if (splitByHash.length > 2) { throw "要格式化的url中最多有一个#hash"; } pureUrl = splitByHash[0]; if (splitByHash.length == 2) { hashInfo = "#" + splitByHash[1]; } for (i in params) { reg = new RegExp("(^|)"+ i +"=([^&]*)(|$)"); if (pureUrl.match(reg) != null) { pureUrl = pureUrl.replace( reg, i+"="+ (isEncode ? encodeURIComponent(params[i]) : params[i]) ); } else { if (pureUrl.match(/\?/g) != null) { pureUrl = pureUrl + "&" + i + "=" + (isEncode ? encodeURIComponent(params[i]) : params[i]); } else { pureUrl = pureUrl + "?" + i + "=" + (isEncode ? encodeURIComponent(params[i]) : params[i]); } } } pureUrl += hashInfo; return pureUrl; };
看例子
var url = "https://weibo.com/u/5824742984/home?wvr=5#where"; formatUrl = tools.formatUrlParams(url, { age: 26, name: "叶荣添", where: "homepage", wvr: 123 }); console.log(formatUrl);
上面的例子输出https://weibo.com/u/5824742984/home?wvr=123&age=26&name=%E7%87%95%E7%9D%BF%E6%B6%9B&where=homepage#where
正则校验参数
匹配字符串中的字符是否全是给定的选择类型
- zh: 表示汉子,
- en: 表示大小写字母
- 其他的用户传入的会加入字符串匹配中
/** * * @param string text 待校验的参数 * @param array types 校验的规则 * @param int min 最小长度 * @param int max 最大长度 * @return bool 是否校验通过 */ Tools.prototype.checkChar = function(text, types, min, max) { var typeRegs, i, reg, regObj, ret, scope; if ("undefined" == typeof(min)) { if ("undefined" == typeof(max)) { scope = "+"; } else { scope = "{,"+max+"}"; } } else { if (parseInt(min) < 0) { throw "字符串长度最小值应该是大于等于0的整数"; } min = parseInt(min); scope = "{"+min+","; if ("undefined" == typeof(max)) { scope += "}"; } else { if( parseInt(max) < 0 || parseInt(max) < min ) { throw "字符串长度最小值应该是大于等于0的整数,且应该大于等于最小长度"; } max = parseInt(max); scope += max + "}"; } } var typeRegs = { "zh": "[\u4e00-\u9fa5]", "en": "[a-zA-Z]" }, i, reg, regObj, ret; types = types ? types : ["zh", "en"]; reg = "^(" for (i=0; i<types.length; i++) { if (!typeRegs[types[i]]) { reg += types[i] + "|"; } else { reg += typeRegs[types[i]] + "|"; } } reg = reg.substr(0, reg.length - 1); reg += ")"+scope+"$"; //console.log(reg); // 打印正则 regObj = new RegExp(reg); ret = regObj.test(text); return ret ? true : false; };
看例子:
tools.checkChar("叶荣添", false, 3); // 输出true tools.checkChar("叶荣添", false, 5, 10); // 输出false tools.tools.checkChar("叶荣添a-_ \\sdASS ", ["zh", "en", "[_\\- ]", "[\\\\]"]); // 输出true