【微信小程序-原生开发】实用教程19 - 表单范例 VS 表单校验(含必填校验函数封装,实时数字校验)

简介: 【微信小程序-原生开发】实用教程19 - 表单范例 VS 表单校验(含必填校验函数封装,实时数字校验)

表单开发中,最常见的即必填校验和数字校验

必填校验

当字段较多时,为了优化代码,将必填校验进行封装

必填校验函数封装 utils\form.js

export function formRequiredValid(formRule, formData) {
  let result = true
  let obj = formRule

  obj[Symbol.iterator] = function* () {
    let keys = Object.keys(obj);
    for (let k of keys) {
      yield [k, obj[k]];
    }
  };

  for (let [k, v] of obj) {
    if (!formData[k]) {
      wx.showToast({
        icon: 'none',
        title: `${v}不能为空`,
      })
      result = false
      break
    }
  }
  return result
}

使用范例

import {
  formRequiredValid
} from '../../../../utils/form.js'
 
  save: function () {
    let formRule = {
      title: "标题",
      date: "日期",
      time: "时间",
      placeInfo: "地点",
    }

    if (!formRequiredValid(formRule, this.data.formData)) {
      return
    }
    //  此处省略数据库的保存逻辑
 }

实时数字校验

数字类数据,需实时进行数据类型校验,如

<t-input clearable bindclear="inputChange" bindchange="inputChange" data-prop='maxNum' value="{{formData.maxNum}}" type="number" label="人数:" placeholder="请输入最大报名人数" suffix="人" align="right" t-class-tips="tips" tips="{{formError.maxNum ? '请输入数字' : ''}}" />

<t-input clearable bindclear="inputChange" bindchange="inputChange" data-prop='cost' value="{{formData.cost}}" type="number" label="费用:" placeholder="请输入人均费用" suffix="元/人" align="right" t-class-tips="tips" tips="{{formError.cost ? '请输入数字' : ''}}" />
    // 表单校验报错
    formError: {},
  inputChange: function (e) {
    let prop = e.currentTarget.dataset.prop
    let value = e.detail.value || '' //清空表单时,触发更新,避免清空时修改无效
    this.data.formData[prop] = value
    if (prop === 'date') {
      this.data.formData.week = getWeek(value)
    }
    // 对特殊字段进行正则校验
    if (prop === 'cost' || prop === 'maxNum') {
      const isNumber = value ? /^\d+(\.\d+)?$/.test(value) : true;
      this.data.formError[prop] = !isNumber
      this.setData({
        formError: this.data.formError
      });
      if (value && isNumber) {
        // 将数据格式化为数字
        this.data.formData[prop] = Number(value)
      }
    }
    this.setData({
      formData: this.data.formData
    })
  },
// 保存时, 校验是否通过数据校验
    if (Object.values(this.data.formError).includes(true)) {
      wx.showToast({
        icon: 'error',
        title: '未通过数据校验',
      })
      return
    }

其他实时校验

参考实时数字校验,修改对应的正则表达式即可,如邮箱校验,手机号校验等。

目录
相关文章
|
人工智能 小程序 前端开发
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
863 0
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
|
人工智能 开发框架 机器人
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
9568 38
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
|
JSON 机器人 API
gewe微信机器人搭建教程
GeWe开放平台是基于 微信开放平台的二次封装API服务,开发者可以使用本服务来处理微信中的各种事件,并可以通过后台调用对应的 API 来驱动微信自动执行任务,如自动收发消息、自动化应答、自动群邀请、群管理等,封装了 RPA技术流程,简化开发者二次开发难度,提供了开发者与微信对接的能力,使用简单,操作快捷,支持多种语言接入。
1053 17
|
存储 API UED
鸿蒙特效教程02-微信语音录制动画效果实现教程
本教程适合HarmonyOS初学者,通过简单到复杂的步骤,一步步实现类似微信APP中的语音录制动画效果。
627 0
鸿蒙特效教程02-微信语音录制动画效果实现教程
|
JSON 小程序 JavaScript
原生微信小程序笔记完整总结
原生微信小程序笔记完整总结
703 1
|
XML 小程序 前端开发
小程序制作教程
小程序制作教程
1887 3
小程序制作教程
|
小程序 编译器 数据安全/隐私保护
小白保姆级教程:微信公众号开发,从0到1
【8月更文挑战第8天】小白保姆级教程:微信公众号开发,从0到1
5029 3
小白保姆级教程:微信公众号开发,从0到1
|
机器学习/深度学习 人工智能 JSON
微信小程序原生AI运动(动作)检测识别解决方案
近年来,疫情限制了人们的出行,却推动了“AI运动”概念的兴起。AI运动已在运动锻炼、体育教学、线上主题活动等多个场景中广泛应用,受到互联网用户的欢迎。通过AI技术,用户可以在家中进行有效锻炼,学校也能远程监督学生的体育活动,同时,云上健身活动形式多样,适合单位组织。该方案成本低、易于集成和扩展,已成功应用于微信小程序。
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
4095 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
小程序 PHP
全新UI自助图文打印系统小程序源码 PHP后端 附教程
全新UI自助图文打印系统小程序源码 PHP后端 附教程
902 2