介尘部落

文学|音乐|休闲娱乐|计算机技术|地球科学|社会学——知识成就命运


async-validator表单验证用法 小程序适用

现在网络上关于小程序的表单验证其实是没有更好的解决方法的,这是由小程序特殊的前端框架模式决定的。也许小程序脚本如果开放js的dom操作的话,会变得简单很多,但这样又会与前端模式相背离,估计是不会开放的。

现在最常用的验证插件应该是WxValidate,提供了类似于jQuery Validate 的验证配置模式。使用上也相差不大。

WxValidate插件官网:https://github.com/wux-weapp/wx-extend/blob/master/src/pages/validate/index.js#L1

WxValidate插件

WxValidate插件基本的使用方法如下:

//验证函数
    initValidate() {
      const rules = {
        nickName: {
          required: true,
          minlength:2
        },
        phone:{
          required:true,
          tel:true
        },
        age:{
          required:true,
        
        },
        sex:{
          required:true,
        }

      }
      const messages = {
        nickName: {
          required: '请填写姓名',
          minlength:'请输入正确的名称'
        },
        phone:{
          required:'请填写手机号',
          tel:'请填写正确的手机号'
        },
        age:{
          required:'请填写年纪',
        },
        sex:{
          required:'请填写性别',
        }
      }
      this.WxValidate = new WxValidate(rules, messages)
    },
  //调用验证函数
   formSubmit: function(e) {
      console.log('form发生了submit事件,携带的数据为:', e.detail.value)
      const params = e.detail.value
      //校验表单
      if (!this.WxValidate.checkForm(params)) {
        const error = this.WxValidate.errorList[0]
        this.showModal(error)
        return false
      }
      this.showModal({
        msg: '提交成功'
      })
    }

我没有做太多的了解,因为不太喜欢这种配置方式,同样的字段要分rule和message分开写两次,有点繁琐。具体可以参考官方文档。

我这里重点介绍的是下面这个验证组件,async-validator。

async-validator官网:https://github.com/yiminghe/async-validator

下面介绍它的基本用法。

首先是组件安装与引用

npm i async-validator
import Schema from ‘async-validator’

组件基本配置

const descriptor = {
  userName: { type: 'string',required: true },
  pass: { type: 'string',required: true }
}
const descriptor = {
  pass: { required: true, pattern:/^\w{6,20}$/ }
}
const descriptor = {
  userName: { type: 'string', min: 6, max: 20 },
  role: { type: 'array', min: 1, max: 3 },
  age: { type: 'integer', min: 18, max: 60 }
}
const descriptor = {
   userName: { type: 'string', len: 6},
   age: { type: 'integer', len: 6},
   role: { type: 'array', len: 6 }
 }
const descriptor = {
 role: { type: "enum", enum: ['admin', 'user', 'guest'] }
}
const descriptor = {
   userName: { type: 'string', required: true},
   pass: { type: 'string', required: true, whitespace: true }
 }
const descriptor = {
  userName: {
   	type: 'string',
   	required: true,
   	transform (value) {
      return value.trim()
   }
}
var descriptor = {
   urls: {
     type: "array", 
     required: true,
     defaultField: {type: "url"}
   }
 }
//深层对象验证
const descriptor = {
   demo: {
	 type: "array", 
	 required: true, 
	 len: 3,
	 fields: {
	 	0: {type: "string", required: true},
	 	1: {type: "number", required: true},
	 	2: {type: "url", required: true}
	 }
  }
}
const descriptor = {
	ageRange:{
          validator (rule, value, callback) {
            const _value = _.compact(value) // 使用loash过滤掉假值
            if (!_value.length) {
              callback(rule.field + '至少要包含一个数据')
            } else if (_value[0] - _value[1] > 0) {
              callback(rule.field + '结束值不能小于初始值')
            } else {
              callback()
            }
          }
        }
}
const descriptor = {
   userName: {
     asyncValidator (rule, value, callback) {
       axios({
         url: '/users',
         params: { userName: value }
       }).then((data) => {
         callback()
       }, (error) => {
         callback(new Error(error))
       })
     }
   }
 }
const descriptor = {
  name(rule, value, callback, source, options) {
    const errors = [];
    if (!/^[a-z0-9]+$/.test(value)) {
      errors.push(new Error(
        util.format('%s must be lowercase alphanumeric characters', rule.field),
      ));
    }
    return errors;
  },
};
const validator = new Schema(descriptor);
validator.validate({ name: 'Firstname' }, (errors, fields) => {
  if (errors) {
    return handleErrors(errors, fields);
  }
  // validation passed
});
const validator = new Schema(descriptor)

另一种配置方法,是多规则以及与提示文字合并作数组,非常紧凑,严重推荐!!!

阅读全文
公众号-介尘阅读时光
赞赏支持

0 Responses to “async-validator表单验证用法 小程序适用”

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

×