手机号中间4位隐藏处理,,金额显示处理

提供一些日常开发中,实用得代码片段。欢迎大家补充!

1、手机号隐藏中间4位

//手机号脱敏
function mobile(data) {
    return data.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
}

2、证件号脱敏,包括但不限于身份证

//身份证脱敏 -- 1
function idCard(data) {
    return data.replace(/(\d{4})\d*([0-9xX]{4})/, "$1******$2");
}

//身份证脱敏 -- 2
function idCard(data) {
    if(data.toString().length == 18) {
        return data.slice(0,2) + '****************' + data.slice(16,18)
    } else if(data.toString().length == 15) {
        return data.slice(0,2) + '***********' + data.slice(13,15)
    }
}

//证件脱敏,data->数据,beforeLen->前置位数,afterLen->后置位数
function newIdCard(data, beforeLen, afterLen) {
    let dataLenth = data.length - beforeLen - afterLen
    let middleStr = ''
    for (let i = 0; i < dataLenth; i++) {
        middleStr += '*'
    }
    return data.slice(0, 2) + middleStr + data.substring(data.length - afterLen)
}

3、金额处理,经常会遇到数字相乘或相除得问题,但结果往往不是我们想要得,例如12.32 * 7 结果是86.24000000000001;

 为了避免此种情况得发生,以万元为单位提供一种方法。详细解释请查看https://www.cnblogs.com/weiqt/articles/2642393.html

//金额
export function money(num){
    return num >= 10000 ? parseFloat(num) * 10000/100000000+'万' : num
}

4、根据需要返回不同类型得日期

//格式化时间
export function dateFormat(time,fmt){
    return fnDateFormat(time,fmt)
}

export default function(time,fmt){
    var fmt = fmt || 'yyyy-MM-dd HH:mm:ss';
    var time = time ? new Date(time) : new Date();
    var o = {   
        "M+" : time.getMonth()+1,                 //月份   
        "d+" : time.getDate(),                    //
        "H+" : time.getHours(),                   //小时   
        "m+" : time.getMinutes(),                 //
        "s+" : time.getSeconds(),                 //
        "S"  : time.getMilliseconds()             //毫秒   
    };
    if(/(y+)/.test(fmt))
        fmt=fmt.replace(RegExp.$1, (time.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;
}

5、通过身份证获取年龄、性别、生日

//通过身份证获取年龄 & 生日
const idCardBirthday = function(data){
    //获取出生年月日
    var year = data.substring(6,10);
    var month = data.substring(10,12);
    var day = data.substring(12,14);
    return `${year}-${month}-${day}`
}

//通过身份证获取性别
const idCardGender = function(data){
    //1 男 2 女    
    return parseInt(data.slice(-2, -1)) % 2 == 1 ? 1 : 2;    
}

const birthdayAge = function(str, type) {
    var type = type || 'year';


    //补零
    let zeroize = function(value) {
        if (value < 10) {
            value = '0' + value
        }
        return value
    }
    
    var birthDay = new Date(str)
    var yearBirth = birthDay.getFullYear();
    var monthBirth = birthDay.getMonth() + 1;
    var dayBirth = birthDay.getDate();

    var myDate = new Date();
    var monthNow = myDate.getMonth() + 1;
    var dayNow = myDate.getDate();
    var age = myDate.getFullYear() - yearBirth;
    if (monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)) {
        age--;
    }

    return age
}

export default {
  idCardBirthday ,
  idCardGender,
  birthdayAge
}
    

6、常用正则表达式

//手机号
const mobile = /^[1]+\d{10}$/;

//身份证
//const idCard = /(^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$) | (^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/;    //18位 & 15位
const idCard = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/

//护照
const passport = /^[0-9A-Z]{7,11}$/

//姓名    不包含特殊字符
//const name = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>《》/?~!@#¥……&*()——|{}【】‘;:”“'。,、?+0-9]");
const name = /(^([a-zA-Z]+\s)*[a-zA-Z]+$)|(^[\u4E00-\u9FA5]+$)/;
//字母
const letter = /^[A-Za-z]+$/

//网址
const domain = /(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/;

//邮箱
const email = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/

//纳税号
const corporationTax = /^[0-9A-Z]{15,20}$/

7、文件下载,针对PDF

/**
 * 文件链接转文件流下载--主要针对pdf 解决谷歌浏览器a标签下载pdf直接打开的问题
 * @param url  :文件链接
 * @param fileName  :文件名;
 * @param type  :文件类型;
 */
export function fileLinkToStreamDownload(url, fileName, type) {
  let reg = /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\/])+$/;
  if (!reg.test(url)) {
    throw new Error("传入参数不合法,不是标准的文件链接");
  } else {
    let xhr = new XMLHttpRequest();
    xhr.open('get', url, true);
    xhr.setRequestHeader('Content-Type', `application/${type}`);
    xhr.responseType = "blob";
    xhr.onload = function () {
      if (this.status == 200) {
        //接受二进制文件流
        var blob = this.response;
        downloadExportFile(blob, fileName, type)
      }
    }
    xhr.send();
  }
}


/**
 *下载导出文件
 * @param blob  :返回数据的blob对象或链接
 * @param tagFileName  :下载后文件名标记
 * @param fileType  :文件类 word(docx) excel(xlsx) ppt等
 */
function downloadExportFile(blob, tagFileName, fileType) {
  let downloadElement = document.createElement('a');
  let href = blob;
  if (typeof blob == 'string') {
    downloadElement.target = '_blank';
  } else {
    href = window.URL.createObjectURL(blob); //创建下载的链接
  }
  downloadElement.href = href;
  downloadElement.download = tagFileName + '.' + fileType; //下载后文件名
  document.body.appendChild(downloadElement);
  downloadElement.click(); //点击下载
  document.body.removeChild(downloadElement); //下载完成移除元素
  if (typeof blob != 'string') {
    window.URL.revokeObjectURL(href); //释放掉blob对象
  }

}

 

posted @ 2021-06-29 16:02  逩跑得前端小学生  阅读(1256)  评论(0编辑  收藏  举报