今年在渣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

工作中常用的JS函数整理分享(欢迎大家补充)的更多相关文章

  1. 工作中常用的js、jquery自定义扩展函数代码片段

    仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...

  2. (总结)工作中常用的js自定义函数——日期时间类

    //设置时间类 var Wsdatatime = function(){ this.today = (new Date()).getTime(); //当前时间 } Wsdatatime.protot ...

  3. 工作中常用的QTP操作Excel函数

    前言 本文只是对工作中常用的EOM相关函数的整理,并不是要写个大而全的操作手册,如果想对EOM有更多的了解可以参考QTP的帮助文档或查看QTP安装目录\CodeSamplesPlus\UsingExc ...

  4. 工作中常用到的Java集合类有哪些?

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y Java集合是我认为在Java基础中最最重要的知 ...

  5. 收集一些工作中常用的经典SQL语句

    作为一枚程序员来说和数据库打交道是不可避免的,现收集一下工作中常用的SQL语句,希望能给大家带来一些帮助,当然不全面,欢迎补充! 1.执行插入语句,获取自动生成的递增的ID值 INSERT INTO ...

  6. 【 PostgreSQL】工作中常用SQL语句干货

    接触gp数据库近一年的时间,语法上和其他数据库还是有些许不同,工作中常用的操作语句分享给大家! -- 建表语句 create table ods.ods_b_bill_m ( acct_month t ...

  7. 常用的WinAPI函数整理

    常用的WinAPI函数整理 一.进程  创建进程:    CreateProcess("C:\\windows\\notepad.exe",0,0,0,0,0,0,0,&s ...

  8. 工作中常用的Linux命令:mkdir命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6076075.html (转载请注明出处) 在Linux系统中,mkdir命令用来创建一个目录或一个级联目录. ...

  9. 工作中常用的Linux命令:crontab命令

    本文链接:http://www.cnblogs.com/MartinChentf/p/6060252.html (转载请注明出处) crontab是一个用来设置.删除或显示供守护进程cron执行的定时 ...

随机推荐

  1. 运行React-Native项目

    首先需要配置好环境.集体配置安装Homebrew,Node.js,React Native; 命令行开启RN项目 (如要cd 进入到当前项目的跟目录下) 1. npm install 2. react ...

  2. 常用Map实现类对比

    翻译人员: 铁锚 翻译时间: 2013年12月12日 原文链接: HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap Map 是最常用的数据结构之一 ...

  3. 简单说说Android自定义view学习推荐的方式

    这几天比较受关注,挺开心的,嘿嘿. 这里给大家总结一下学习自定义view的一些技巧.  以后写自定义view可能不会写博客了,但是可以开源的我会把源码丢到github上我的地址:https://git ...

  4. mysql进阶(八)怎么对varchar类型排序问题

    MySQL中怎么对varchar类型排序问题 asc 升级 desc降序 在mysql默认order by 只对数字与日期类型可以排序,但对于varchar字符型类型排序好像没有用了,下面我来给各位同 ...

  5. Java进阶(十四)实现每天定时对数据库的操作

    Java实现每天定时对数据库操作 现在有一个很棘手的问题:客户要求实现一个功能,就是每日凌晨自动计算慢性病订单是否有需要在今日提醒的,如果有则生成一条提醒记录到lm_notice之中. 如何在Web工 ...

  6. Android 几种网络请求的区别与联系

    HttpUrlConnection 最开始学android的时候用的网络请求是HttpUrlConnection,当时很多东西还不知道,但是在android 2.2及以下版本中HttpUrlConne ...

  7. The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files

    The type java.lang.Object cannot be resolved.It is indirectly referenced from required .class files ...

  8. EBS-子库存转移和物料搬运单区别

    FROM:http://bbs.erp100.com/forum.php?mod=viewthread&tid=261550&extra=page%3D7 EBS-子库存转移和物料搬运 ...

  9. C语言删除字符串中重复的字符

    #include <stdio.h> #include <string.h> #define NR(x) sizeof(x)/sizeof(x[0]) int Del_char ...

  10. orale中如何获取当前月份?

    就本人所知,在oracle中,有两种方式可以提取系统的当前月份: 1.使用extract 函数,具体用法看SQL语句: select extract(month from sysdate) as &q ...