分享前端开发常用代码片段

分享开发中常用的一些 代码片段,我们的目标是早下班、不加班,哈哈~~

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;

//金额
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]$/

7、邮箱、纳税号正则表达式

//网址
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}$/

8、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对象
  }

}

9、判断是否微信环境、小程序环境

var isWeiXin = function() {
	var ua = window.navigator.userAgent.toLowerCase();
	if (ua.match(/MicroMessenger/i) == 'micromessenger') {
		return true;
	} else {
		return false;
	}
}

export function isMiniProgram(callback) { //是否为小程序环境
	//是否在微信环境
	if (!isWeiXin()) {
		callback(false);
	} else {
		//微信API获取当前运行环境
		wx.miniProgram.getEnv((res) => {
			if (res.miniprogram) { //小程序环境
				callback(true);
			} else {
				callback(false);
			}
		})
	}
}

10、数组去重

datas = [1,4,6,78,768,34,344,3,6,78,55,5,38,'qq','aa','qq']
let datas = datas.filter((item, index, arr) => {
    return arr.indexOf(item, 0) === index;
})
console.log(datas) //[1, 4, 6, 78, 768, 34, 344, 3, 55, 5, 38, 'qq', 'aa']

11、删除Object中的null和undefined

//删除null和Unfined
const removeNullUndefined = objText => {
	Object.keys(objText ).forEach(item => {
	    if (!objText[item] && objText[item] != 0) {
	        delete objText[item]
	    }
    })
	return objText;
}

12、比较当前日期是否在时间段之内

countTime(startTime, endTime){
	let nowDate = new Date(),
		startDate = new Date(startTime),
		endDate = new Date(endTime)
	if(nowDate >= startDate && nowDate <= endDate){
		return true
	}

	return false
}

13、阻止默认行为

$('#button').on('click', function (event) {
    event.preventDefault();
});

 14、阻止冒泡

$('#button').on('click', function (event) {
    event.stopPropagation();
});

 15、手机端禁止页面在浏览器滚动

//可以在根元素body上添加preventDefault方法 
<body ontouchmove="event.preventDefault()" >

//或者  在滑动事件touchMove中添加
document.addEventListener('touchmove', function(event) {
    event.preventDefault();
})

16、获取浏览器滚动条的高度

document.documentElement.scrollTop || document.body.scrollTop

17、发送验证码

//获取短信验证码倒计时
countdown(maxTime) {
	if (maxTime > 1) {
		maxTime--;
		this.verityText = `${maxTime}s后重发`;
		setTimeout(() => {
			this.countdown(maxTime);
		}, 1000)
	} else {
		this.verityText = '重新发送';
		this.verityCodeFlag = false;
	}
},

18、删除对象中某属性

let params = {
    planCode: '',
    orgCode: '0001',
    personCode: '',
    id: '10'
}

//方案一 delete属性
delete params.id  //对象名.属性名

//方案二 es6解构
let { planCode,...params} = params ; 
console.log(params)
//{orgCode: '0001', personCode: '', id: '10'}

19、

let params = {
    planCode: '',
    orgCode: '0001',
    personCode: '',
    id: '10'
}

// 方案1
var d = JSON.parse(JSON.stringify(params,function(key,value){
    if(value == ''|| value == null || value == undefined){
      delete params[key]
    }else{
      return value;
    }
}))

console.log(d)
// {orgCode: '0001', id: '10'}

// 方案2
for(let item in params){
    if(params[item] == '') {
        delete params[item]
    }
}

 

持续更新。。。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值