博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 工具类
阅读量:6094 次
发布时间:2019-06-20

本文共 4617 字,大约阅读时间需要 15 分钟。

整理常用的工具类,提高编码效率

正则

整理日常使用较多的用户名,密码,强密码,手机号,邮箱,身份证号,QQ以及微信号的验证

class _Regexp {    /**     * 用户名, 4到16位(字母,数字,下划线,减号)     * @param {String} str      */    isUser(str) {        return /^[a-zA-Z0-9_-]{4,16}$/.test(str)    }    /**     * 密码, 以字母开头,长度在6~18之间,只能包含字母、数字和下划线     * @param {String} str      */    isPassword() {        return /^[a-zA-Z]\w{5,17}$/.test(str)    }    /**     * 强密码, 最少6位,至少1个大写字母,1个小写字母,1个数字,1个特殊字符     * @param {String} str     */    isStrongPassword(str) {        return /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*?]).*$/.test(str)    }    /**     * 手机号     * @param {String} str      */    isPhone(str) {        return /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/.test(str)    }    /**     * 邮箱     * @param {String} str      */    isEmail(str) {        return /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(str)    }    /**     * 身份证号     * @param {String} str      */    isIdCard(str) {        return /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(str)    }    /**     * QQ, 5-11位     * @param {String} str      */    isQQ(str) {        return /^[1-9][0-9]{4,10}$/.test(str)    }    /**     * 微信, 6-20位,以字母开头,(字母,数字,减号,下划线)     * @param {String} str      */    isWeChart(str) {        return /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/.test(str)    }}

字符串

整理字符串去除所有空格,随机密码以及如何检测密码强度

class _String {    /**     * 去除字符串中所有空格     * @param {String} str      */    trimAll(str) {        return str.replace(/\s+/g, '')    }    /**     * 随机码, randomPassword(36) -> h9q9b4mytk     * @param {Number} count      */    randomPassword(count) {        return Math.random().toString(count).substring(2)    }    /**     * 检测密码强度     * @param {String} str      */    checkPassword(str) {        let level = 0        if (str.length < 6) {            return level        }        if (/[0-9]/.test(str)) {            level ++        }        if (/[a-z]/.test(str)) {            level ++        }        if (/[A-Z]/.test(str)) {            level ++        }        if (/[\.|_]/.test(str)) {            level ++        }        return level    }}

数组

数组去重,网上有很多种用法,比如使用indexOf,splice以及ES6种set的新特性。在此给出一个我经常用到的数据去重方案。

class _Array {    /**     * 数组去重, 利用对象的特性     * @param {Array} old_arr      */    removeRepeat(old_arr) {        let new_arr = []        let obj = {}        for (let i = 0, len = old_arr.length; i < len; i++) {            // 对象中是否存在该属性            if (!obj[old_arr[i]]) {                new_arr.push(old_arr[i])                obj[old_arr[i]] = i            }        }        return new_arr    }    /**     * 数字类型的数组最大值     * @param {Array} arr      */    maxArr(arr) {        return Math.max.apply(null, arr)    }    /**     * 数字类型的数组最小值     * @param {Array} arr      */    minArr(arr) {        return Math.min.apply(null, arr)    }}

Date

class _Date {    /**     * 格式化${startTime}距现在的已过时间     * @param {Date} startTime      */    formatPassTime(startTime) {        let currentTime = Date.parse(new Date())        let time = currentTime - startTime        let day = parseInt(time / (1000 * 60 * 60 * 24))        let hour = parseInt(time / (1000 * 60 * 60))        let min = parseInt(time / (1000 * 60))        let month = parseInt(day / 30)        let year = parseInt(month / 12)        if (year) {            return year + '年前'        }        if (month) {            return month + '个月前'        }        if (day) {            return day + '天前'        }        if (hour) {            return hour + '小时前'        }        if (min) {            return min + '分钟前'        } else {            return '刚刚'        }    }    /**     * 格式化现在距${endTime}的剩余时间     * @param {Date} endTime      */    formatRemainTime(endTime) {        let startDate = new Date()        let endDate = new Date(endTime)        let t = endDate.getTime() - startDate.getTime()            let d = 0        let h = 0        let m = 0        let s = 0            if (t >= 0) {            d = Math.floor(t / 1000 / 3600 / 24)            h = Math.floor(t / 1000 / 60 / 60 % 24)            m = Math.floor(t / 1000 / 60 % 60)            s = Math.floor(t / 1000 % 60)        }            return d + '天 ' + h + '小时 ' + m + '分钟 ' + s + '秒'    }}

Object

var type = function(o) {  var s = Object.prototype.toString.call(o);  return s.match(/\[object (.*?)\]/)[1].toLowerCase();};['Null', 'Undefined', 'Object', 'Array', 'String', 'Number', 'Boolean', 'Function', 'RegExp'].forEach(function(t) {  type['is' + t] = function(value) {    return type(value) === t.toLowerCase();  };});type.isObject({})      // truetype.isNumber(NaN)     // true

未完待补充

转载地址:http://jcwza.baihongyu.com/

你可能感兴趣的文章
注解开发
查看>>
如何用 Robotframework 来编写优秀的测试用例
查看>>
Django之FBV与CBV
查看>>
Vue之项目搭建
查看>>
app内部H5测试点总结
查看>>
Docker - 创建支持SSH服务的容器镜像
查看>>
[TC13761]Mutalisk
查看>>
三级菜单
查看>>
Data Wrangling文摘:Non-tidy-data
查看>>
加解密算法、消息摘要、消息认证技术、数字签名与公钥证书
查看>>
while()
查看>>
常用限制input的方法
查看>>
Ext Js简单事件处理和对象作用域
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
12.通过微信小程序端访问企查查(采集工商信息)
查看>>
WinXp 开机登录密码
查看>>
POJ 1001 Exponentiation
查看>>
HDU 4377 Sub Sequence[串构造]
查看>>
云时代架构阅读笔记之四
查看>>
WEB请求处理一:浏览器请求发起处理
查看>>