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
    
  • 相关阅读:
    LAMP的搭建
    linux利用命令重置大量密码
    CSS的应用下
    Day13 CSS的与应用
    Day12 CSS简单用法
    Day12 前端html
    Day11 数据库的基本语法(偏重于查询)
    Java-->把txt中的所有字符按照码表值排序
    Java-->将txt文件的所有行反转
    Java-->在txt文件每一行前加行数和冒号
  • 原文地址:https://www.cnblogs.com/iforever/p/8431719.html
Copyright © 2011-2022 走看看