前端常用方法工具函数 src/utils/validate.js 校验是否小于6位 判断是否为数字 判断是否是数组...

src/utils/validate.js

/**
 * 公用js方法
 */
/**
 * @description 判读是否为外链
 * @param path
 * @returns {boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}
/**
 * @description 判读是否为网络链接
 * @param path
 * @returns {boolean}
 */
export function isHttp(path) {
  let newStr = path.indexOf("http");
  if (newStr == 0) {
    return true;
  }
  if (newStr == -1) {
    return false;
  }
}
/**
 * @description 校验是否小于6位
 * @param str
 * @returns {boolean}
 */
export function isPassword(str) {
  return str.length >= 6
}

/**
 * @description 判断是否为数字
 * @param value
 * @returns {boolean}
 */
export function isNumber(value) {
  const reg = /^[0-9]*$/
  return reg.test(value)
}

//生成大写金额
export function intToChinese(money, unit) {
  //汉字的数字
  var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
  //基本单位
  var cnIntRadice = new Array('', '拾', '佰', '仟');
  //对应整数部分扩展单位
  var cnIntUnits = new Array('', '万', '亿', '兆');
  //对应小数部分单位
  var cnDecUnits = new Array('角', '分', '毫', '厘');
  //整数金额时后面跟的字符
  var cnInteger = '整';
  //整型完以后的单位
  var cnIntLast = unit;
  //最大处理的数字
  var maxNum = 999999999999999.9999;
  //金额整数部分
  var integerNum;
  //金额小数部分
  var decimalNum;
  //输出的中文金额字符串
  var chineseStr = '';
  //分离金额后用的数组,预定义
  var parts;
  if (money === '') { //不能用==
    return '';
  }
  money = parseFloat(money);
  if (money >= maxNum) {
    //超出最大处理数字
    return '';
  }
  if (money == 0) {
    chineseStr = cnNums[0] + cnIntLast + cnInteger;
    return chineseStr;
  }
  //转换为字符串
  money = money.toString();
  if (money.indexOf('.') == -1) {
    integerNum = money;
    decimalNum = '';
  } else {
    parts = money.split('.');
    integerNum = parts[0];
    decimalNum = parts[1].substr(0, 4);
  }
  //获取整型部分转换
  if (parseInt(integerNum, 10) > 0) {
    var zeroCount = 0;
    var IntLen = integerNum.length;
    for (var i = 0; i < IntLen; i++) {
      var n = integerNum.substr(i, 1);
      var p = IntLen - i - 1;
      var q = p / 4;
      var m = p % 4;
      if (n == '0') {
        zeroCount++;
      } else {
        if (zeroCount > 0) {
          chineseStr += cnNums[0];
        }
        //归零
        zeroCount = 0;
        chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
      }
      if (m == 0 && zeroCount < 4) {
        chineseStr += cnIntUnits[q];
      }
    }
    chineseStr += cnIntLast;
  }
  //小数部分
  if (decimalNum != '') {
    var decLen = decimalNum.length;
    for (var i = 0; i < decLen; i++) {
      var n = decimalNum.substr(i, 1);
      if (n != '0') {
        chineseStr += cnNums[Number(n)] + cnDecUnits[i];
      }
    }
  }
  if (chineseStr == '') {
    chineseStr += cnNums[0] + cnIntLast + cnInteger;
  } else if (decimalNum == '') {
    chineseStr += cnInteger;
  }
  return chineseStr;
}

// 校验保留两位小数金额
export function isDecimal2(value) {
  const reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
  return reg.test(value)
}

// 校验保留四位小数金额
export function isDecimal4(value) {
  const reg = /^([1-9]\d{0,15}|0)(\.\d{1,4})?$/
  return reg.test(value)
}

/**
 * @description 判断是否为IP
 * @param ip
 * @returns {boolean}
 */
export function isIP(ip) {
  const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
  return reg.test(ip)
}

/**
 * @description 判断是否是传统网站
 * @param url
 * @returns {boolean}
 */
export function isUrl(url) {
  const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return reg.test(url)
}

/**
 * @description 判断是否是小写字母
 * @param str
 * @returns {boolean}
 */
export function isLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/**
 * @description 判断是否是大写字母
 * @param str
 * @returns {boolean}
 */
export function isUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/**
 
 * @description 判断是否是大写字母开头
 * @param str
 * @returns {boolean}
 */
export function isAlphabets(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/**
 * @description 判断是否是字符串
 * @param str
 * @returns {boolean}
 */
export function isString(str) {
  return typeof str === 'string' || str instanceof String
}

/**
 * @description 判断是否是数组
 * @param arg
 * @returns {arg is any[]|boolean}
 */
export function isArray(arg) {
  if (typeof Array.isArray === 'undefined') {
    return Object.prototype.toString.call(arg) === '[object Array]'
  }
  return Array.isArray(arg)
}

/**
 * @description 判断是否是端口号
 * @param str
 * @returns {boolean}
 */
export function isPort(str) {
  const reg = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/
  return reg.test(str)
}

/**
 * @description 判断是否是手机号
 * @param str
 * @returns {boolean}
 */
export function isPhone(str) {
  const reg = /^1\d{10}$/
  return reg.test(str)
}

/**
 * @description 判断是否是身份证号(第二代)
 * @param str
 * @returns {boolean}
 */
export function isIdCard(str) {
  const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
  return reg.test(str)
}

/**
 * @description 判断是否是邮箱
 * @param str
 * @returns {boolean}
 */
export function isEmail(str) {
  const reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
  return reg.test(str)
}

/**
 * @description 判断是否中文
 * @param str
 * @returns {boolean}
 */
export function isChina(str) {
  const reg = /^[\u4E00-\u9FA5]{2,4}$/
  return reg.test(str)
}

/**
 * @description 判断是否为空(包含false)
 * @param str
 * @returns {boolean}
 */
export function isBlank(str) {
  return (
    str == null ||
    false ||
    str === '' ||
    str.trim() === '' ||
    str.toLocaleLowerCase().trim() === 'null'
  )
}

/**
 * @description 判断是否为空(不包含false)
 * @param str
 * @returns {boolean}
 */
export function isEmpty(obj) { // 为空情况
  const empty_arr = ['', undefined, null];
  return (empty_arr.indexOf(obj) > -1 || obj.toString().trim() === '');
}

/**
 * @description 判断是否为固话
 * @param str
 * @returns {boolean}
 */
export function isTel(str) {
  const reg = /^(400|800)([0-9\\-]{7,10})|(([0-9]{4}|[0-9]{3})(-| )?)?([0-9]{7,8})((-| |转)*([0-9]{1,4}))?$/
  return reg.test(str)
}

/**
 * @description 判断是否为数字且最多两位小数
 * @param str
 * @returns {boolean}
 */
export function isNum(str) {
  const reg = /^\d+(\.\d{1,2})?$/
  return reg.test(str)
}

/**
 * @description 判断经度 -180.0~+180.0(整数部分为0~180,必须输入1到5位小数)
 * @param str
 * @returns {boolean}
 */
export function isLongitude(str) {
  const reg = /^[-|+]?(0?\d{1,2}\.\d{1,5}|1[0-7]?\d{1}\.\d{1,5}|180\.0{1,5})$/
  return reg.test(str)
}

/**
 * @description 判断纬度 -90.0~+90.0(整数部分为0~90,必须输入1到5位小数)
 * @param str
 * @returns {boolean}
 */
export function isLatitude(str) {
  const reg = /^[-|+]?([0-8]?\d{1}\.\d{1,5}|90\.0{1,5})$/
  return reg.test(str)
}

/**
 * @description rtsp校验,只要有rtsp:// 是否是流传输
 * @param str
 * @returns {boolean}
 */
export function isRTSP(str) {
  const reg = /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
  const reg1 = /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]):[0-9]{1,5}/
  const reg2 = /^rtsp:\/\/([a-z]{0,10}:.{0,10}@)?(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\//
  return reg.test(str) || reg1.test(str) || reg2.test(str)
}

/**
 * @description 查看是否是移动端
 * @returns {boolean}
 */
export function handleIsMobile() {
  return document.body.getBoundingClientRect().width - 1 < 992;
}

/**
 * @description 剔除空对象的方法
 */
export function filterParams(obj) { // 剔除对象的空属性
  var _newObj = {};
  for (var key in obj) {
    if (obj.hasOwnProperty(key)) { // 判断对象中是否有这个属性
      if (isEmpty(obj[key])) continue;
      _newObj[key] = typeof obj[key] === 'object' ? (
        obj[key] instanceof Array ? arrayFilterParams(obj[key]) : filterParams(obj[key])
      ) : obj[key];

    }
  }
  return _newObj;
}

/**
 * @description 剔除数组中的空值
 */
export function arrayFilterParams(arr) {
  var err = [];
  const empty_arr = ['', undefined, null];
  arr.forEach((item, index) => {
    if (isEmpty(item)) return;
    err.push(
      typeof item === 'object' ? (
        item instanceof Array ? arrayFilterParams(item) : filterParams(item)
      ) : item
    );
  })
  return err;
}
/**
 * @description 获取树结构的数据 
 * @param func //过滤回调函数, data=>data.[要判断的字段]==‘要判断的值’
 * @param tree //完整树
 * @param des //pro 获取树节点的全部数据 next 获取子节点的全部数据 this 获取当前节点的全部数据, all 单树数据
 * @param code //要查询的字段名,没有时全部返回
 */
export function getTreeData(func, tree, des, code) {
  let getData = treeFindPath(tree, func, code)
  // treeFindPath(tree, data=> data.name==='水上分局')
  if (des == "pro") {
    return getData[getData.length - 2];
  } else if (des == "all") {
    return getData
  } else if (des == "next") {
    return getData[getData.length - 1].children;
  } else {
    return getData[getData.length - 1];
  }
}
function treeFindPath(tree, func, code, path = []) {
  if (!tree) return []
  for (const data of tree) {
    // 这里按照你的需求来存放最后返回的内容吧
    if (code) {
      path.push(data[code])
    } else {
      path.push(data)
    }
    if (func(data)) return path
    if (data.children) {
      const findChildren = treeFindPath(data.children, func, code, path)
      if (findChildren.length) return findChildren
    }
    path.pop()
  }
  return []
}
/**
 * @description 获取n位随机数 字母和数字
 * @param n 多少位
 * @returns 
 */
export function randomn(n) {
  let res = ''
  for (; res.length < n; res += Math.random().toString(36).substr(2).toUpperCase()) { }
  return res.substr(0, n)
}

/**
 * @description 返回数据类型
 * @param 
 * @returns 
 */
export function type(para) {
  return Object.prototype.toString.call(para)
}
/**
 * @description 数组去重
 * @param 
 * @returns 
 */
export function delRepeatArray(arr) {
  return [...new Set(arr)]
}

/**
 * @description 判断是否是函数
 * @param fun
 * @returns {boolean}
 */
export function isFunction(fun) {
  try {
    if (fun && typeof fun === "function") {
      return Object.prototype.toString.call(fun) === '[object Function]'
    } else {
      return false;
    }
  } catch (error) {
    return false;
  }
}
/**
 * @description 判断是否为正整数
 * @param value 输入要判断的内容
 * @returns {boolean}
 */
export function isPositiveInteger(value) {
  var r = /^\+?[1-9][0-9]*$/;
  if (r.test(value)) {
    return true;
  } else {
    return false;
  }
}

/**
 * @description 时间戳转时间
 * @param value 时间戳
 * @param tag 分割符 ["-",":"]//两个参数,第一个是年月日分隔符,第二个是时分秒分割符
 * @returns {boolean}
 */
export function getDate(value, tag) {
  var date = new Date(value);
  if (tag) {
    let Y = date.getFullYear() + tag[0];
    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + tag[0];
    let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
    let h = date.getHours() + tag[1];
    let m = date.getMinutes() + tag[1];
    let s = date.getSeconds();
    return Y + M + D + h + m + s
  } else {
    let Y = date.getFullYear() + '-';
    let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    let D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
    let h = date.getHours() + ':';
    let m = date.getMinutes() + ':';
    let s = date.getSeconds();
    return Y + M + D + h + m + s
  }
}


/**
 * @description 获取当前解析地址 (包含端口号)
 * @param type 类型
 * @returns 获取当前解析地址
 */
export function getLocationUrl(type) {
  if (!type) {
    return window.location.host;
  }
}

/**
 * @description 将数字转成英文分割符号,保留两位小数(多用于金额)
 * @param num 数字
 * @returns 获取转换后的数字
 */
export function numberToStringForMoney(num) {
  if (num === "" || num === undefined || num === 0 || num === null) {
    return "0.00";
  }
  let number = JSON.parse(JSON.stringify(num));
  number = Number(number).toFixed(2);//保留两位销售
  number = Number(number).toLocaleString();//转换成三个一分割的数字
  if (number.toString().split(".")[1]) {
    let len = number.toString().split(".")[1].length;
    if (len === 1) {
      return number.toString() + "0"
    } else {
      return number.toString();
    }
  } else {
    // alert(number);
    return number.toString() + ".00";
  }
}

/**
 * @description 字典类:查找并返回对应的内容字段 
 * item 要匹配的字段 
 * obj 对象 
 * findItem 查找的字段名 
 * returnItem 返回的字段名
 * @returns 查询的结果
 */
export function getSelectDict(item, obj, findItem, returnItem) {
  if (obj instanceof Array) {
    for (let i = 0; i < obj.length; i++) {
      const element = obj[i];
      if (
        element[findItem] &&
        item === element[findItem]
      ) {
        return element[returnItem];
      }
      if (
        element[findItem] == 0 &&
        item === element[findItem]
      ) {
        return element[returnItem];
      }
    }
  } else {
    const element = obj;
    if (
      element[findItem] &&
      item === element[findItem]
    ) {
      return element[returnItem];
    }
    if (
      element[findItem] == 0 &&
      item === element[findItem]
    ) {
      return element[returnItem];
    }
  }
  return;
}

export default {
  isExternal,//判读是否为外链
  isHttp,//判读是否为网络链接
  isPassword,//校验是否小于6位
  isNumber,//判断是否为数字
  isDecimal2,// 校验保留两位小数金额
  isDecimal4,// 校验保留四位小数金额
  isIP,//判断是否为IP
  isUrl,//判断是否是传统网站
  isLowerCase,//判断是否是小写字母
  isUpperCase,//判断是否是大写字母
  isAlphabets,//判断是否是大写字母开头
  isString,//判断是否是字符串
  isArray,//判断是否是数组
  isFunction,//判断是否是函数
  isPort,//判断是否是端口号
  isPhone,//判断是否是手机号
  isIdCard,//判断是否是身份证号(第二代)
  isEmail,//判断是否是邮箱
  isChina,//判断是否中文
  isBlank,//判断是否为空(包含false)
  isEmpty,//判断是否为空(不包含false)
  isTel,//判断是否为固话
  isNum,//判断是否为数字且最多两位小数
  isLongitude,//判断经度 -180.0~+180.0(整数部分为0~180,必须输入1到5位小数)
  isLatitude,//判断纬度 -90.0~+90.0(整数部分为0~90,必须输入1到5位小数)
  isRTSP,//rtsp校验,只要有rtsp:// 是否是流传输
  handleIsMobile,//查看是否是移动端   提示:不是很准确,根据屏幕尺寸判断的
  filterParams,//剔除空对象  剔除对象中的空元素(所有级别)
  arrayFilterParams,//剔除数组中的空值
  getTreeData,//获取树结构的数据  (提示:该函数较为复杂,请参考上面实现说明,以及全局搜索使用示例)
  randomn,//获取n位随机数 字母和数字
  type,//获取当前数据类型 返回数据类型 
  delRepeatArray,//数组去重 
  intToChinese,//生成对应的大写金额
  isPositiveInteger,//判断是否为正整数
  getDate,//时间戳转时间
  getLocationUrl,//获取当前解析地址 (包含端口号)
  numberToStringForMoney,//将数字转成英文分割符号,保留两位小数(多用于金额)
  getSelectDict,//字典类:查找并返回对应的内容字段 
}

参考:
前端常用方法工具函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值