实用通用函数

/**
 * 大写首字符
 * @param {String} string
 */
export function uppercaseFirst (string) {
  return string.charAt(0).toUpperCase() + string.slice(1)
}

/**
 *  生成随机ID
 */
export const generateRandId = () => {
  return Math.random()
    .toString(36)
    .substr(-8);
};
/**
 * 获取地址栏的参数
 * params {String} url
 * reutrn { Object } 
 */
export const getURLParameters = url =>
  (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(
    (a, v) => (
      (a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a
    ),
    {}
  );
/**
 *
 * @param { Array } array
 * @returns 去重之后的数组
 *
 */
export function arrayToHeavy (array) {
  for (let i = 0; i < array.length; i++) {
    for (let j = i + 1; j < array.length; j++) {
      if (array[i] === array[j]) {
        array.splice(j, 1);
        j--
      }
    };
  }
  return array
}
/**
 * 数据类型判断
typeof:只能判断number/string/boolean/object/function,不能判断数组(object)
instanceof: 不能判断原始类型数据,它判断的是 A是否是B的实例,原理就是只要右边变量的 prototype在左边变量的原型链上即可。
constructor: 不能判断null和undefined,[].constructor == Array,原始类型需要通过new 定义 才能用constructor判断:new Number(222).constructor == Number
 * @param {*} name
 * @param {String} type
 * @returns { Boolean }
 */
export function diffType (name, type) {
  return Object.prototype.toString.call(name) === `[object ${type}]`
}
/**
 *  防抖函数
 * @param {Function } fn
 * @param {Number} delay
 */
export const debounceFn = (fn, delay = 500)=> {
  let timer = null
  return function () {
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(() => {
      fn.apply(this, arguments)
      timer = null
    }, delay)
  }
}
// 验证函数
export  $validate = {
  /**
   * 验证地址
   * @author 2022-09-03
   * @param {String} path 地址
   * @returns {Boolean}
   * @example $validate.isExternal('https://zszc.com')
   */
  isExternal(path) {
    return /^(https?:|mailto:|tel:)/.test(path)
  },
  /**
   * 是否是Number
   * @author 2022-09-03
   * @param {String|Number} val
   * @returns {Boolean}
   * @example $validate.isNumber(255)
   */
  isNumber(val) {
    return /^[0-9]*$/.test(val)
  },
  /**
   * 验证邮箱号
   * @author 2022-09-03
   * @param {String} val 邮箱号
   * @returns {Boolean}
   * @example $validate.isEmail('zszc@qq.com')
   */

  isEmail(val) {
    let reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
    return reg.test(val)
  },

  /**
   * 判断手机号是否正确
   * @author 2022-09-03
   * @param {String} val 手机号
   * @returns {Boolean}
   * @example $validate.isPhone('15373582236')
   */
  isPhone(val) {
    let zj = /^0\d{2,3}-?\d{7,8}$/
    let sj = /^1(2|3|4|5|6|7|8|9)\d{9}$/
    return zj.test(val) || sj.test(val)
  },

  /**
   * 判断是否是图片
   * @author 2022-09-03
   * @param {String} src 文件地址
   * @returns  {Boolean}
   * @example $validate.isPicture('image.png')
   */
  isPicture: function (src) {
    let index
    if (!src || (index = src.indexOf('.')) === -1) {
      return false
    }
    let pic = ['png', 'jpg', 'jpeg', 'bmp']
    let exts = src.substring(index + 1) //文件扩展名
    return pic.indexOf(exts) === -1
  },
  /**
   * 验证正数数值的小数位
   * @author 2022-09-03
   * @param {String|Number} val 需要验证的数值
   * @param {String|Number} length 小数长度
   * @returns  {Boolean}
   * @example $validate.decimalPoin(2.33,2)
   */
  decimalPoint(val, length) {
    let integer = /^\+?((0|([1-9]+\d*))|((0\.\d+)|([1-9]+\d*\.\d+)))$/
    let reg = new RegExp(`^\\d+[.]?\\d{0,${length}}$`)
    if (!integer.test(val)) {
      return false
    } else {
      return reg.test(val)
    }
  },
  /**
   * 验证身份证号
   * @author 2022-09-03
   * @param {String} code //身份证号
   * @returns {boolean}
   * @example $validate.IdentityCodeValid('')
   */
  IdentityCodeValid(code) {
    let city = {
      11: '北京',
      12: '天津',
      13: '河北',
      14: '山西',
      15: '内蒙古',
      21: '辽宁',
      22: '吉林',
      23: '黑龙江 ',
      31: '上海',
      32: '江苏',
      33: '浙江',
      34: '安徽',
      35: '福建',
      36: '江西',
      37: '山东',
      41: '河南',
      42: '湖北 ',
      43: '湖南',
      44: '广东',
      45: '广西',
      46: '海南',
      50: '重庆',
      51: '四川',
      52: '贵州',
      53: '云南',
      54: '西藏 ',
      61: '陕西',
      62: '甘肃',
      63: '青海',
      64: '宁夏',
      65: '新疆',
      71: '台湾',
      81: '香港',
      82: '澳门',
      91: '国外 '
    }
    let tip = ''
    let pass = true

    if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)) {
      tip = '身份证号格式错误'
      pass = false
    } else if (!city[code.substr(0, 2)]) {
      tip = '身份证号地址编码错误'
      pass = false
    } else {
      //18位身份证需要验证最后一位校验位
      if (code.length == 18) {
        code = code.split('')
        //∑(ai×Wi)(mod 11)
        //加权因子
        let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        //校验位
        let parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
        let sum = 0
        let ai = 0
        let wi = 0
        for (let i = 0; i < 17; i++) {
          ai = code[i]
          wi = factor[i]
          sum += ai * wi
        }
        let last = parity[sum % 11]
        if (parity[sum % 11] != code[17]) {
          // tip = "身份证号校验位错误";
          pass = false
        }
      }
    }
    return pass
  },

  /**
   * 验证统一社会信用代码
   * @author 2022-09-03
   * @param {String} Code 统一社会信用代码
   * @return {Boolean}
   * @example $validate.CheckSocialCreditCode('')
   */
  CheckSocialCreditCode(Code) {
    var patrn = /^[0-9A-Z]+$/
    //18位校验及大写校验
    if (!Code || Code.length != 18 || patrn.test(Code) == false) {
      return false
    } else {
      var Ancode //统一社会信用代码的每一个值
      var Ancodevalue //统一社会信用代码每一个值的权重
      var total = 0
      var weightedfactors = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28] //加权因子
      var str = '0123456789ABCDEFGHJKLMNPQRTUWXY'
      //不用I、O、S、V、Z
      for (var i = 0; i < Code.length - 1; i++) {
        Ancode = Code.substring(i, i + 1)
        Ancodevalue = str.indexOf(Ancode)
        total = total + Ancodevalue * weightedfactors[i]
        //权重与加权因子相乘之和
      }
      var logiccheckcode = 31 - (total % 31)
      if (logiccheckcode == 31) {
        logiccheckcode = 0
      }
      var Str = '0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y'
      var Array_Str = Str.split(',')
      logiccheckcode = Array_Str[logiccheckcode]
      var checkcode = Code.substring(17, 18)
      if (logiccheckcode != checkcode) {
        return false
      }
      return true
    }
  },
  /**
   *金额验证
   * @author 2022-10-8
   * @param {String} value //字段
   * @returns {boolean}
   * @example $validate.isMoney('')
   */
  isMoney(value){
    let reg = /^\d+[.]?\d{0,2}$/
    return reg.test(value)
   
  },


  isEmpty(value){
     if(!value){
      return false
     }else{
      return true
     }
    
  }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容