微信小程序表单验证,WxValidate的使用

新人,仅记录自己编程中遇到的东西,使用WxValidate之前在网上查了部分博客,关于自定义验证方法写的模模糊糊。最后还是自己摸索出来的。

在小程序开发中有一款常用的表单验证插件:WxValidate.js。该插件是参考jQuery Validate封装的,为小程序提供一套常用的验证规则。

一、github地址

下载地址:GitHub - wux-weapp/wx-extend/wx-validate/WxValidate.js: 微信小程序 - 扩展插件(发送请求、Promise API、表单验证、Restful API)

二、参数说明

参数类型描述
rulesobject验证字段的规则
messagesobject验证字段的提示信息

三:内置校验规则

序号规则描述
1required: true这是必填字段。
2email: true请输入有效的电子邮件地址。
3tel: true请输入11位的手机号码。
4url: true请输入有效的网址。
5date: true请输入有效的日期。
6dateISO: true请输入有效的日期(ISO),例如:2009-06-23,1998/01/22。
7number: true请输入有效的数字。
8digits: true只能输入数字。
9idcard: true请输入18位的有效身份证。
10equalTo: 'field'输入值必须和 field 相同。
11contains: 'ABC'输入值必须包含 ABC。
12minlength: 5最少要输入 5 个字符。
13maxlength: 10最多可以输入 10 个字符。
14rangelength: [5, 10]请输入长度在 5 到 10 之间的字符。
15min: 5请输入不小于 5 的数值。
16max: 10请输入不大于 10 的数值。
17range: [5, 10]请输入范围在 5 到 10 之间的数值。

四:常用实例方法

名称返回类型描述
checkForm(e)boolean验证所有字段的规则,返回验证是否通过。
valid()boolean返回验证是否通过。
size()number返回错误信息的个数。
validationErrors()array返回所有错误信息。
addMethod(name, method, message)boolean添加自定义验证方法。

五:使用方法

1.上面的链接下载WxValidate.js放入本地utils目录

2.import导入

找到自己的WxValidate.js的所在目录,../是返回上一级目录,我这里的做了分包所以结构多上去了一级目录。

import WxValidate from "../../../utils/WxValidate";
var app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    form: {
      name: '',
      contactPhone: '',
      lawManIDcard:'',
      businessImage: [],
      IDcardImages: []
    },
  },
})

3.验证规则的书写

首先要在onLoad函数中加入验证规则函数,然后是验证规则和报错规则的代码。

此处需要注意的是一定要在js文件中onLoad验证规则,否则编译会报checkform is not a function 

  onLoad(options) {
    this.initValidate();
  },
  //验证函数
  initValidate() {
    const rules = {
      name: {
        required: true,
      },
      contactPhone: {
        required: true,
      },
      lawManIDcard: {
        required: true,
        idcard: true
      },
      businessImage: {
        required: true,
      },
      IDcardImages: {
        required: true,
        IDcardImages: true,
      }
    }
    const messages = {
      name: {
        required: '请填写公司名称',
      },
      contactPhone: {
        required: "请填写联系人手机号",
      },
      lawManIDcard: {
        required: "请填写法人身份证号",
        idcard: "请输入正确身份证号码"
      },
      businessImage: {
        required: "请上传营业执照",
      },
      IDcardImages: {
        required: "请上传身份证正反两面照片",
      }
    }

    this.WxValidate = new WxValidate(rules, messages)
    // 自定义验证规则
    this.WxValidate.addMethod('IDcardImages', (value, param) => {
      return this.WxValidate.optional(value) || value.length == 2
    }, '请上传身份证正反两面照片')

  },

这里我增加了自定义验证规则,我这段addMethod的意思是在他的里面增加了个名叫IDcardImages的验证方法,第二个参数是函数,第三个是错误信息。

rules中的required的意思就不用多说了,按照我自己理解的意思就是调用什么验证方法,required和idcard是它本身自带的验证方法,IDcardImages是我自定义的验证方法。

3.表单提交

wxml中的表单我下面会贴出来,这里直接贴验证方法。

    formSubmit(e) {
        let params = e.detail.value
        console.log(params, '---');
        //这是表单提交方法返回的
        //校验表单
        if (!this.WxValidate.checkForm(params)) {
            const error = this.WxValidate.errorList[0]
            wx.showToast({
                title: error.msg,
                icon: 'none'
            })
            return false
        }
    //通过表单验证执行的操作
    },

六.全部代码

wxml中fc-imageUp为我自己封装的图片上传组件,form中的formSubmit为提交触发方法,需点击formType为submit的button触发。自定义组件的值想通过提交方法去获取,需要在组件内通过wx://form-field使自定义组件有类似于表单控件的行为。 form 组件可以识别这些自定义组件,并在 submit 事件中返回组件的字段名及其对应字段值。这将为它添加name和value属性。关于表单方面的问题在官方自行查阅form相关的文档。

//wxml表单

<!-- 表单 -->
<view class="formBox">
    <form catchsubmit="formSubmit" catchreset="formReset">
        <view class="formItem">
            <view class="label">公司名称:</view>
            <input class="valueBox" name='name' value='{{form.name}}' placeholder="请输入公司名称"/>
        </view>
        <view class="formItem">
            <view class="label">联系人手机号:</view>
            <input class="valueBox" name='contactPhone' value='{{form.contactPhone}}' placeholder="请输入联系人手机号"/>
        </view>
        
        <view class="formItem">
            <view class="label">法人身份证号:</view>
            <input class="valueBox" name='lawManIDcard' value='{{form.lawManIDcard}}' placeholder="请输入法人身份证"/>
        </view>
        <view class="formItem-img">
            <view class="label">营业执照:</view>
            <fc-imageUp name="businessImage" image="{{form.businessImage}}" maxlength="2"
                        binddelImg="delBusinessImage" bindchangeImg="changeBusinessImage"/>
        </view>
        <view class="formItem-img">
            <view class="label">身份证照片:</view>
            <fc-imageUp name="IDcardImages" image="{{form.IDcardImages}}" maxlength="2" binddelImg="delIDcardImages"
                        bindchangeImg="changeIDcardImages"/>
        </view>
        <view>
            <button class="subBtn" type="primary" formType="submit">提交</button>
        </view>
    </form>
</view>
//js
import WxValidate from "../../../utils/WxValidate";

var app = getApp();
Page({
    /**
     * 页面的初始数据
     */
    data: {
        form: {
            name: '',
            contactPhone: '',
            lawManIDcard: '',
            businessImage: [],
            IDcardImages: []
        },
    },
    onLoad(options) {
        this.initValidate();
    },
    //验证函数
    initValidate() {
        const rules = {
            name: {
                required: true,
            },
            contactPhone: {
                required: true,
            },
            lawManIDcard: {
                required: true,
                idcard: true
            },
            businessImage: {
                required: true,
            },
            IDcardImages: {
                required: true,
                IDcardImages: true,
            }
        }
        const messages = {
            name: {
                required: '请填写公司名称',
            },
            contactPhone: {
                required: "请填写联系人手机号",
            },
            lawManIDcard: {
                required: "请填写法人身份证号",
                idcard: "请输入正确身份证号码"
            },
            businessImage: {
                required: "请上传营业执照",
            },
            IDcardImages: {
                required: "请上传身份证正反两面照片",
            }
        }

        this.WxValidate = new WxValidate(rules, messages)
        // 自定义验证规则
        this.WxValidate.addMethod('IDcardImages', (value, param) => {
            return this.WxValidate.optional(value) || value.length == 2
        }, '请上传身份证正反两面照片')

    },
    formSubmit(e) {
        let params = e.detail.value
        console.log(params, '---');
        //这是表单提交方法返回的
        //校验表单
        if (!this.WxValidate.checkForm(params)) {
            const error = this.WxValidate.errorList[0]
            wx.showToast({
                title: error.msg,
                icon: 'none'
            })
            return false
        }
    //通过表单验证执行的操作
    },

})
//wxss  按钮设置为全局变量
.textBold{
  font-size: 32rpx;
  font-weight: bold;
  text-align: center;
  margin: 30rpx;
}
.textL{
  width: 80%;
  font-size: 25rpx;
  color: rgb(112, 112, 112);
  margin: 0 auto;
}
.formBox{
  width: 90%;
  margin: 20rpx auto;
  padding-bottom: 100rpx;
  box-sizing: border-box;
}
.formItem{
  display: flex;
  align-items: center;
  margin: 20rpx 0;
}
.formItem-img{
  display: flex;
  /* align-items: center; */
  margin: 20rpx 0;
}
.formItem-img>.label{
  padding-top: 20rpx;
}
.label{
  width: 180rpx;
  margin-right: 20rpx;
  text-align: right;
}
.valueBox{
  padding: 10rpx 20rpx;
  background-color: #E9E9E9;
  flex:1;
  /* border: 2rpx solid rgb(112, 112, 112); */
  border-radius: 10rpx;
}

.subBtn{
  margin-top: 20rpx;
  background-color: var(--themeColor) !important;
}

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值