前端工具类个人收集

路由

Url中取参数

/**
* Url中取参数
* @url 页面地址,url为空从当前页面的url获取
* @name 参数名
*/
function getQuery(url,name){
  const u = url || window.location.search.replace('&', '&').replace(/\/$/, '');
  const reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`);
  const r = u.substr(u.indexOf('?') + 1).match(reg);
  return r != null ? r[2] : '';
}

文件

文件转url

URL.createObjectURL(blob || file)

文件流转base64

/**
* @param file  [文件类型]
*/
getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.readAsDataURL(file)
    reader.onload = () => resolve(reader.result)
    reader.onerror = error => reject(error)
  })
}

base64 转文件流

/**
* 将图片base64转成文件流的形式
* @param data 请求参数
* @param mimeType 文件的mine type类型
*/
  getFileStream(dataURL,mimeType) {
    // 为了兼容性 处理数据
    const binaryString = window.atob(dataURL.split(',')[1])
    const arrayBuffer = new ArrayBuffer(binaryString.length)
    const intArray = new Uint8Array(arrayBuffer)
    for (let i = 0, j = binaryString.length; i < j; i++) {
      intArray[i] = binaryString.charCodeAt(i)
    }
    const fileData = [intArray]
    let blob
    try {
      blob = new Blob(fileData, { type: mimeType })
    } catch (error) {
      window.BlobBuilder =
        window.BlobBuilder ||
        window.WebKitBlobBuilder ||
        window.MozBlobBuilder ||
        window.MSBlobBuilder
      if (error.name === 'TypeError' && window.BlobBuilder) {
        const builder = new BlobBuilder()
        builder.append(arrayBuffer)
        blob = builder.getBlob(mimeType)
      } else {
        throw new Error('版本过低,不支持上传图片')
      }
    }
    return blob
  }

文件流转JSON

/*
*@param blob 文件
*/
const blob2JSON = (blob) => {
	return new Promise((resolve) => {
		const file= new FileReader();
		file.readAsText(blob,'utf-8');
		file.onload = function() {
		  const result = JSON.parse(file.result);
		  resolve(result)
		}
	})
}

时间

年龄计算(精确到岁、月、小时)

function getAge(beginStr, endStr) {
        const reg = new RegExp(
                /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})(\s)(\d{1,2})(:)(\d{1,2})(:{0,1})(\d{0,2})$/);
        const beginArr = beginStr.match(reg);
        const endArr = endStr.match(reg);
        let days = 0;
        let month = 0;
        let year = 0;
        days = endArr[4] - beginArr[4];
        if (days < 0) {
            month = -1;
            days = 30 + days;
        }
        month = month + (endArr[3] - beginArr[3]);
        if (month < 0) {
            year = -1;
            month = 12 + month;
        }
        year = year + (endArr[1] - beginArr[1]);

        const yearString = year > 0 ? year + "岁" : "";
        const mnthString = month > 0 ? month + "月" : "";
        const dayString = days > 0 ? days + "天" : "";
        /*
         * 1 如果岁 大于等于1 那么年龄取 几岁 2 如果 岁等于0 但是月大于1 那么如果天等于0 天小于3天 取小时
         * 例如出生2天 就取 48小时
         */
        var result = "";
        if (year >= 1) {
            result = yearString + mnthString;
        } else {
            if (month >= 1) {
                result = days > 0 ? mnthString + dayString : mnthString;
            } else {
                var begDate = new Date(beginArr[1], beginArr[3] - 1,
                        beginArr[4], beginArr[6], beginArr[8], beginArr[10]);
                var endDate = new Date(endArr[1], endArr[3] - 1, endArr[4],
                        endArr[6], endArr[8], endArr[10]);

                var between = (endDate.getTime() - begDate.getTime()) / 1000;
                days = Math.floor(between / (24 * 3600));
                var hours = Math.floor(between / 3600 - (days * 24));
                var dayString = days > 0 ? days + "天" : "";
                result = days >= 3 ? dayString : days * 24 + hours + "小时";
            }
        }

        return result;
    }
    console.log(getAge("1980-03-22 10:1:2", "1982-03-22 10:1:2"));
    console.log(getAge("1980-02-29 10:1:2", "1981-03-01 10:12:2"));
    console.log(getAge("1980-03-22 10:1:2", "1980-03-23 9:1:1"));
    console.log(getAge("1981-02-28 10:1:2", "1981-03-01 10:1:2"));

正则

/**
 * 正则表达式校验规则
  * 官方文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
  */
  rules: {
    // 手机号:参考http://www.sohu.com/a/163187581_283658
    mobile: /^1(((3|4|5|7|8|70)[0-9])|(66|98|99|410|440))\d{8}$/,
    // 手机号, 简单11位校验
    mobileSimple: /^\d{11}$/,
    // 邮箱:字母数字+ 减号下划线点号 字母数字+ @ +字母数字减号点号+字母数字(2-4位)
    email: /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z]{2,4}$/,
    // 短信验证码:6位数字
    codeMsg: /^\d{6}$/,
    // 图形验证码:4位字母数字
    codeImg: /^[A-Za-z\d]{4}$/,
    // 密码:8-20位,必须包含大小写,可以有数字
    password: /^(?=.*[A-Z])(?=.*[a-z])^[a-zA-Z0-9]{8,20}$/,
    // 1-20位中文
    1: /^[\u4e00-\u9fa5]{1,20}$/,
    // 0-10位数字
    2: /^\d{0,10}$/,
    // 1-100的整数
    3: /^(([1-9]\d?)|100)$/,
    // 1-多位字母数字下划线减号
    4: /^[\w-]+$/,
    // 0-100的整数
    5: /^(([0-9]\d?)|100)$/,
    // 1-10的整数
    6: /^(10|[1-9])$/,
    roundNumber: /^(([1-9]\d?)|100)$/, // 1-100的整数
    // 纯数字
    number: /^\d+$/,
    // 纯数字,5位
    number5: /^\d{0,5}$/,
    // 纯数字,6位
    number6: /^\d{0,6}$/,
    // 0-100 数字,一位小数
    percent: /(^(\d|[0-9]\d)(\.\d{1})?$)|(^100$)/,
    // 1-100 数字,两位小数
    percent2: /(^(\d|[1-9]\d)(\.\d{1})?$)|(^100$)/,
    // 最大99999.99, 小数点前5位, 小数点后两位
    price: /^\d{1,5}(\.\d{1,2})?$/,
    bigPrice: /^\d+(\.\d{1,2})?$/,
    // 数字与英文组合
    numberAndLetter: /^[A-Za-z0-9]+$/,
    // 数字, 英文, 中文组合
    chart: /^[\u4e00-\u9fa5A-Za-z0-9]+$/
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值