3.总结微信小程序9个优雅小技巧-链式函数编程

例子: https://gitee.com/akff/ak-mini-program

实现效果


image.png

实现代码

    if (isTool
      .isHaveValue(value, "value不能为空")
      .isNumber(number, "number不能为空", "number不是数字类型")
      .isEmail(email, "email不能为空", "email不是邮箱格式")
      .isPhone(phone, "phone不能为空", "phone不是正确电话格式")
      .isPrice(price, "price不能为空", "price不是正确价格格式")
      .isResult === true) {
      // 通过校验
    } else {
      // 不通过校验
    }

核心代码

const regExpression = require('./AKRegExpression.js')


// 方法: 是否数字
function checkNumber(str, isHaveZero) {
  let regE = new RegExp('[0-9]', 'g')
  //是否已经有 点'.'
  let isHavePoint = false
  for (let index in str) {
    if (str[index] == '.') { //是否为'.'
      // 判断是否有重复逗号
      if (isHavePoint) {
        return false
      }
      isHavePoint = true
    } else if (regE.exec(str) == undefined) { //是否为数字
      //是否为'.'特殊符号
      return false
    } else if (isHaveZero != true && index == 0 && str[0] == "0") {
      //是否第一位为0
      return false
    }
  }
  //循环没有跳出,则返回true
  return true
}
// 结果(只要不是进入bundleFalse方法,就是true)
const isResult = true

// 判断方法
const tool = {
  //判断开始时间和结束时间范围
  isEnableTimeRange(startTime, endTime, splitSymbol, warnNote) {
    let start = startTime.split(splitSymbol).join("")
    let end = endTime.split(splitSymbol).join("")
    let note = ""
    if (Number(start) > Number(end)) { //年 开始日期 在结束日期前
      note = (warnNote || "开始时间不能大于结束时间")
    }

    if (note != "") {
      wx.showToast({
        title: note,
        icon: 'none'
      })
      return bundleFalse
    }
    return this
  },

  //非空判断(数组/对象/字符串)
  isHaveValue(data, note) {
    if (data === null) {
      data = undefined
    }
    let typeStr = typeof data
    let isHaveValue = true
    switch (typeStr) {
      case 'undefined': //空
        isHaveValue = false
        break
      case 'string': //字符串
        data == "" && (isHaveValue = false)
        break
      case 'object': //数组或对象
        Object.keys(data).length ||
          (isHaveValue = false)
      default:
        break
    }

    if (note && !isHaveValue) {
      wx.showToast({
        title: note || "",
        icon: 'none',
      })
    }

    return isHaveValue ? this : bundleFalse
  },

  //判断是否电话
  isPhone(data, nullNote = '手机号不能为空', notPhoneNote = '手机号格式不正确') {
    let isHave = this.isHaveValue.apply(this, [data, nullNote]).isResult
    let isPhoneNum = false
    if (isHave) {
      isPhoneNum = regExpression.phoneRegExp.test(data)
      isPhoneNum || wx.showToast({
        title: notPhoneNote,
        icon: 'none'
      })
    }
    return isPhoneNum ? this : bundleFalse
  },

  //判断是否数字
  isNumber(data, nullNote, notNumbernote, isHaveZero) {
    let isNumber = true
    let note = ""

    //判断是否为0 (解决 0 == "")
    let checkZero = data + ""
    if (checkZero == "") {
      isNumber = false
      note = nullNote
    } else if (!checkNumber(checkZero, isHaveZero)) {
      isNumber = false
      note = notNumbernote
    }
    isNumber == false && wx.showToast({
      title: note,
      icon: 'none'
    })
    return isNumber ? this : bundleFalse
  },

  // 是否价格
  isPrice(data, nullNote, notNumbernote, isCanNull) {
    // 判断是否为null
    if (isCanNull && !data) return this
    //正则
    var reg = regExpression.priceExp
    // 转为字符串
    let checkZero = data + ""
    let note = checkZero == "" ? nullNote : notNumbernote
    const isPrice = reg.test(checkZero)
    if (!isPrice) {
      wx.showToast({
        title: note,
        icon: 'none'
      })
    }
    return isPrice ? this : bundleFalse
  },



  // 检查是否是邮箱
  isEmail(value, nullNote, notPhoneNote) {
    if (!this.isHaveValue.apply(this, [value, nullNote]).isResult) {
      return bundleFalse
    }
    let expr = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/
    if (expr.test(value)) {
      return this
    } else {
      notPhoneNote && wx.showToast({
        title: notPhoneNote,
        icon: 'none'
      })
      return bundleFalse
    }

  },

  // 角标是否选中
  isPickerIndex(data, note) {
    let isHaveValue = data != null && data != -1
    if (note && !isHaveValue) {
      wx.showToast({
        title: note || "",
        icon: 'none',
      })
    }
    return isHaveValue ? this : bundleFalse
  },

}

// 创建过渡对象
let bundleFalse = {
  isResult: false
}
// 插入当校验false时的回调-空方法
const funcNames = Object.keys(tool)
for (let funcName of funcNames) {
  if (typeof tool[funcName] == "function") {
    bundleFalse[funcName] = function() {
      return this
    }
  }
}



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