欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

工作中常用的JS函数整理分享(欢迎大家补充)

程序员文章站 2022-04-10 15:17:48
今年在渣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