小程序常用工具积累

这篇博客分享了一组实用的JavaScript工具函数,包括日期格式化、手机号码和身份证号码的验证以及敏感信息的脱敏处理。这些函数可以帮助开发者更方便地处理日常开发中的常见任务,如日期格式定制、手机号和身份证的合法性检查以及姓名、身份证和电话号码的脱敏显示。此外,还介绍了函数防抖和节流的概念及实现,以优化高频率触发的函数执行。
摘要由CSDN通过智能技术生成
  • 时间格式化工具(自定义格式)
const dateFormat = (date, fmt) => {
  if (!date || !date instanceof Date) return "";
  if (!fmt || fmt.constructor != String) fmt = "yyyy-MM-dd hh:mm:ss";
  var o = {
    "M+": date.getMonth() + 1, //月份
    "d+": date.getDate(), //日
    "h+": date.getHours(), //小时
    "m+": date.getMinutes(), //分
    "s+": date.getSeconds(), //秒
    "q+": Math.floor((date.getMonth() + 3) / 3), //季度
    "S": date.getMilliseconds() //毫秒
  };
  if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
  for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt))
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  return fmt;
}
  • 验证手机号
const mobileVerification = (mobile) => {  // mobile为手机号码
  return /^1[3-9]\d{9}$/.test(mobile)
}
  • 验证身份证号
const idCardVerification = (id) => {  // id为身份证号码
  // 1 "验证通过!", 0 //校验不通过
  var format = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/;
  //号码规则校验
  if (!format.test(id)) {
    return {
      'status': 0,
      'msg': '身份证号码不合规'
    };
  }
  //区位码校验
  //出生年月日校验  前正则限制起始年份为1900;
  var year = id.substr(6, 4), //身份证年
    month = id.substr(10, 2), //身份证月
    date = id.substr(12, 2), //身份证日
    time = Date.parse(month + '-' + date + '-' + year), //身份证日期时间戳date
    now_time = Date.parse(new Date()), //当前时间戳
    dates = (new Date(year, month, 0)).getDate(); //身份证当月天数
  if (time > now_time || date > dates) {
    return {
      'status': 0,
      'msg': '出生日期不合规'
    }
  }
  return {
    'status': 1,
    'msg': '校验通过'
  }
}
  • 脱敏
const desensitization = (type,str) => { // type需要脱敏的类型
  let star = ''
  if(null != str && str != undefined){
  	// 姓名脱敏
    if(type=='name'){
      if(str.length <= 2){
        return str.substring(0,1)+"*"  ;
      } else {
        for (var i = 0; i < str.length-1; i++) {
          star= star + '*'
        }
        return str.substring(0,1)+ star ;
      }
     // 身份证脱敏
    }else if (type=='idCard'){
      for (var i = 0; i < str.length-7; i++) {
        star= star + '*'
      }
      return str.substring(0,3)+ star + str.substring(str.length-4,str.length);
     // 手机号脱敏
    }else if (type=='phone'){
      for (var i = 0; i < str.length-7; i++) {
        star= star + '*'
      }
      return str.substring(0,3)+ star + str.substring(str.length-4,str.length);
    }
  }
}
// 依据使用场景使用,感觉封装成工具类或者封装成组件用起来都很方便
  • 函数防抖
const debounce = (fn, wait, scope) => {
  var timeout;
  return function () {
    var context = scope || this,
      args = arguments;
    var later = function () {
      timeout = null;
      fn.apply(context, args);
    };
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
  };
}
  • 函数节流
const throttle = (fn, threshhold, scope) => {
  threshhold || (threshhold = 250);
  var last, deferTimer;
  return function () {
    var context = scope || this;
    var now = +new Date,
      args = arguments;
    if (now - last < threshhold) {
      // 如果时间间隔小于我们设定的时间间隔阈值,则为本次触发操作设立一个新的定时器
      clearTimeout(deferTimer);
      deferTimer = setTimeout(function () {
        last = now;
        fn.apply(context, args);
      }, threshhold);
    } else {
      // 如果时间间隔超出了我们设定的时间间隔阈值,那就不等了,无论如何要反馈给用户一次响应
      last = now;
      fn.apply(context, args);
    }
  };
}

使用举例:

// 引入组件
import {
  dateFormat,
  idCardVerification,
  mobileVerification,
  desensitization,
  debounce,
  throttle 
} from '@/utils/util'

// 在方法中使用
test(){
	dateFormat(new Date(), 'yyyy.MM.dd hh:mm:ss')
	dateFormat(new Date(), 'yyyy-MM-dd hh:mm')
	
	idCardVerification('身份证号')
	
	mobileVerification('手机号')

	desensitization('name','需要脱敏的姓名')
	desensitization('idCard','需要脱敏的身份证号')
	desensitization('phone','需要脱敏的手机号')
};

// 防抖(在使用输入框输入、窗口大小resize之类会重复触发的事件,在多次触发同一函数时,只执行最后一次)
bindinput:debounce(function (res) {
    console.log(res) // 500ms内有输入则刷新时间,停止操作超过500ms则输出内容
}, 500,this);

// 节流(使用在监听页面滚动、高频点击重复触发的事件,保证隔一段时间调用一次)
pageScroll:throttle(function (res) {
    console.log(res)  // 每隔500ms重复输出一次
}, 500,this);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值