前端常用工具函數(shù)


/*
 * 驗證手機號是否合格
 * true--說明合格
 */
export function isPhone(phoneStr) {
  let myreg = /^[1][3,4,5,7,8,9][0-9]{9}$/;
  if (!myreg.test(phoneStr)) {
    return false;
  } else {
    return true;
  }
}

/*
 * 驗證身份證號是否合格
 * true--說明合格
 */
export function isIdCard(idCardStr) {
  let idcardReg = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
  if (idcardReg.test(idCardStr)) {
    return true;
  } else {
    return false;
  }
}

/**
 * 驗證車牌號是否合格
 * true--說明合格
 */
export function isVehicleNumber(vehicleNumber) {
  let xreg = /^[京津滬渝冀豫云遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陜吉閩貴粵青藏川寧瓊使領A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
  let creg = /^[京津滬渝冀豫云遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陜吉閩貴粵青藏川寧瓊使領A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9掛學警港澳]{1}$/;
  if (vehicleNumber.length == 7) {
    return creg.test(vehicleNumber);
  } else if (vehicleNumber.length == 8) {
    return xreg.test(vehicleNumber);
  } else {
    return false;
  }
}

/*
 * 驗證字符串是否為空(也不能為純空格)
 * true--說明為空, false--說明不為空
 */
export function isEmptyString(string) {
  if (
    string == undefined ||
    typeof string == 'undefined' ||
    !string ||
    string == null ||
    string == '' ||
    /^\s+$/gi.test(string)
  ) {
    return true;
  } else {
    return false;
  }
}

/*
 * 生日轉(zhuǎn)為年齡(精確到月份)
 */
export function birsdayToAge(birsday) {
  let aDate = new Date();
  let thisYear = aDate.getFullYear();
  let bDate = new Date(birsday);
  let brith = bDate.getFullYear();
  let age = thisYear - brith;
  if (aDate.getMonth() == bDate.getMonth()) {
    if (aDate.getDate() < bDate.getDate()) {
      age = age - 1;
    }
  } else {
    if (aDate.getMonth() < bDate.getMonth()) {
      age = age - 1;
    }
  }
  return age;
}

/**
 * 判斷數(shù)據(jù)類型
 * @param {any} val - 基本類型數(shù)據(jù)或者引用類型數(shù)據(jù)
 * @return {string} - 可能返回的結(jié)果有,均為小寫字符串
 * number、boolean、string、null、undefined、array、object、function等
 */
export function getType(val){
  //判斷數(shù)據(jù)是 null 和 undefined 的情況
  if (val == null) {
    return val + "";
  }
  return typeof(val) === "object" ?
      Object.prototype.toString.call(val).slice(8, -1).toLowerCase() :
      typeof(val);
}

/*
 * 驗證是否為數(shù)字
 */
export function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

/*
 * 是否為數(shù)組
 */
export function isArray(obj) {
  return Object.prototype.toString.call(obj) === '[object Array]';
}

/*
 * 是否空數(shù)組
 */
export function isArrayEmpty(val) {
  if (val && val instanceof Array && val.length > 0) {
    return false;
  } else {
    return true;
  }
}

/*
 * 獲取url參數(shù)字符串
 * 沒有返回null
 */
export function getQueryString(name) {
  let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
  let r = window.location.search.substr(1).match(reg);
  if (r != null) {
    return unescape(r[2]);
  }
  return null;
}

/*
 * 遞歸深拷貝
 */
export function deepCopy(obj) {
  let result = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      if (typeof obj[key] === 'object' && obj[key] !== null) {
        result[key] = deepCopy(obj[key]);
      } else {
        result[key] = obj[key];
      }
    }
  }
  return result;
}

/**
 * 去除參數(shù)空數(shù)據(jù)(用于向后臺傳遞參數(shù)的時候)
 * @param {Object} obj [參數(shù)對象]
 */
export function filterEmptyData(obj) {
  for (let prop in obj) {
    obj[prop] === '' ? delete obj[prop] : obj[prop];
  }
  return obj;
}

/**
 * @desc  函數(shù)防抖,用于將多次執(zhí)行變?yōu)樽詈笠淮螆?zhí)行
 * @param {function} func - 需要使用函數(shù)防抖的被執(zhí)行的函數(shù)。必傳
 * @param {Number} wait - 多少毫秒之內(nèi)觸發(fā),只執(zhí)行第一次,默認1000ms??梢圆粋? */
export function debounce(fn, delay) {
  delay = delay || 1000; //默認1s后執(zhí)行
  let timer = null;
  return function () {
    let context = this;
    let arg = arguments;
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      fn.apply(context, arg);
    }, delay);
  };
}

/**
 * 節(jié)流函數(shù), 用于將多次執(zhí)行變?yōu)槊扛粢欢螘r間執(zhí)行
 * @param fn 事件觸發(fā)的操作
 * @param delay 間隔多少毫秒需要觸發(fā)一次事件
 */
export function throttle2(fn, delay) {
  let timer = null;
  return function () {
    let context = this;
    let args = arguments;
    if (!timer) {
      timer = setTimeout(function () {
        fn.apply(context, args);
        clearTimeout(timer);
      }, delay);
    }
  };
}

/**
 * 時間戳轉(zhuǎn)換,用戶轉(zhuǎn)換后端返回的json中時間格式問題
 * @param timestamp 時間戳參數(shù)
 */
export function timestampToTime(timestamp) {
  var date = new Date(timestamp) //時間戳為10位需*1000,時間戳為13位的話不需乘1000
  var Y = date.getFullYear() + '-'
  var M_t = date.getMonth() + 1;
  var M = (M_t < 10? ('0' + M_t): M_t) + '-'
  var D = (date.getDate() < 10? ('0' + date.getDate()):date.getDate()) + ' '
  var h = (date.getHours() < 10? ('0' + date.getHours()):date.getHours()) + ':'
  var m = (date.getMinutes() < 10? ('0' + date.getMinutes()):date.getMinutes()) + ':'
  var s = (date.getSeconds() < 10? ('0' + date.getSeconds()):date.getSeconds())
  return Y + M + D + h + m + s
}

/**
 * 格式化文件大小 字節(jié)轉(zhuǎn)換單位
 * @param value
 * @returns {string|*}
 */
export function renderSize(value){
    if(null==value||value==''){
        return "0 Bytes";
    }
    var unitArr = new Array("Bytes","KB","MB","GB","TB","PB","EB","ZB","YB");
    var index=0,srcsize = parseFloat(value);
    index=Math.floor(Math.log(srcsize)/Math.log(1024));
    var size =srcsize/Math.pow(1024,index);
    //  保留的小數(shù)位數(shù)
    size=size.toFixed(2);
    return size+unitArr[index];
}
/**
 * 文件大小 字節(jié)轉(zhuǎn)換單位
 * @param size
 * @returns {string|*}
 */
 export function filterSize(size){

  if (!size) return '';
  if (size < pow1024(1)) return size + ' B';
  if (size < pow1024(2)) return (size / pow1024(1)).toFixed(2) + ' KB';
  if (size < pow1024(3)) return (size / pow1024(2)).toFixed(2) + ' MB';
  if (size < pow1024(4)) return (size / pow1024(3)).toFixed(2) + ' GB';
  return (size / pow1024(4)).toFixed(2) + ' TB'
}

// 求次冪
function pow1024(num) {
  return Math.pow(1024, num)
}
/**
 * 獲取當前時間
 * @param 
 * @returns {string|*}
 */
export function getTime() {
  var myDate = new Date();
  var myYear = myDate.getFullYear(); //獲取完整的年份(4位,1970-????)
  var myMonth = myDate.getMonth() + 1; //獲取當前月份(0-11,0代表1月)
  var myToday = myDate.getDate(); //獲取當前日(1-31)
  var myDay = myDate.getDay(); //獲取當前星期X(0-6,0代表星期天)
  var myHour = myDate.getHours(); //獲取當前小時數(shù)(0-23)
  var myMinute = myDate.getMinutes(); //獲取當前分鐘數(shù)(0-59)
  var mySecond = myDate.getSeconds(); //獲取當前秒數(shù)(0-59)
  var week = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
  var nowTime;

  nowTime =
      myYear +
      '年' +
      fillZero(myMonth) +
      '月' +
      fillZero(myToday) +
      '日' +
      '  ' +
      fillZero(myHour) +
      ':' +
      fillZero(myMinute) +
      ':' +
      fillZero(mySecond) +
      '  ' +
      week[myDay] +
      '  ' +
      fillGreet(myHour);

    return nowTime;
}
// 問候語
function fillGreet(hour) {
  let str = '';
  if (hour < 6) {
      str = '凌晨好!';
  } else if (hour < 9) {
      str = '早上好!';
  } else if (hour < 12) {
      str = '上午好!';
  } else if (hour < 14) {
      str = '中午好!';
  } else if (hour < 17) {
      str = '下午好!';
  } else if (hour < 19) {
      str = '傍晚好!';
  } else if (hour < 22) {
      str = '晚上好!';
  } else {
      str = '夜里好!';
  }
  return str;
}
// 補0
function fillZero(str) {
  var realNum;
  if (str < 10) {
      realNum = '0' + str;
  } else {
      realNum = str;
  }
  return realNum;
}
// 生成指定長度的隨機字符串
export function randomString(len) {
  len = len || 32;
  var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';    /****默認去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
  var maxPos = $chars.length;
  var pwd = '';
  for (let i = 0; i < len; i++) {
    pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
  }
  return pwd;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容