zoukankan      html  css  js  c++  java
  • 工作中常用的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 = " 你好 		;‘’“”()——,
    
    ";
    var formatStr = tools.regA2B(str, [
      	[/^s+|s+$/gm, ""],
      	[/(
    )|(	)/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
    
  • 相关阅读:
    mysql数据库常用指令
    解决windows的mysql无法启动 服务没有报告任何错误的经验。
    “Can't open file for writing”或“operation not permitted”的解决办法
    启动Apache出现错误Port 80 in use by "Unable to open process" with PID 4!
    如何打开windows的服务services.msc
    常见的HTTP状态码 404 500 301 200
    linux系统常用的重启、关机指令
    (wifi)wifi移植之命令行调试driver和supplicant
    linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )
    alloc_chrdev_region申请一个动态主设备号,并申请一系列次设备号
  • 原文地址:https://www.cnblogs.com/iforever/p/8431719.html
Copyright © 2011-2022 走看看