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

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

作者: XAKX | 来源:发表于2024-09-26 11:29 被阅读0次

例子: 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,
}

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/ihmhrjtx.html