另类的form表单校验插件js封装(小程序版)

一、封装的目的

  1.复用性

  2.方便调用

二、分析:

  1.微信小程序表单提交数据只会返回绑定name的value

  2.配置:网上有很多表单的校验插件 但是大部分的配置都是在js  新增正则对象 ,我感觉不太简便,就构思了这个另类校验插件 

三、原理:

  很简单,就是将配置换个地方,将配置更换至HTML input中

四、实现:

  1.配置规则:

<input name="name:user->require-error:用户名是必填项->email:true->error:用户名格式错误" placeholder="用户名"  />

    1.name:user //对应接口data的键

    2.require-error:用户名是必填项 // 必填项提示 大部分插件不仅要配置 require:true 必填项 还要配置 require-error 必填项提示 我认为 只要配置了必填项提示  该input 框就是必填项 

    3.email:true //插件已配置的 常用正则验证  用户也可以在插件中配置自己常用的正则表达式 我这里还配置了  mobile (手机号)、phone(座机号)

    4.regex:^\\w{6,16}$ //现在开发过程中页面也可能有不常用的正则 ,一直在源码中扩充回导致插件越来越大,也比较麻烦 ,为方便使用用户也可在页面中直接配置正则表达式 

     注意:在页面中配置 一定注意字符转义  这个问题坑了我10多分钟 在pc端没问题 在小程序 输入的值一直校验失败

    5.error:用户名格式错误 //正则匹配错误提示 

    6.用->连接是因为正则中也有使用逗号等符号 所以选择-> ,如果在正则中有->在插件源码更换即可

  2.页面:

    HTML:

 

<form bindsubmit="formSubmit" bindreset="formReset" >
  <view class="section">
    <view class="section__title"></view>
    <input name="name:user->require-error:用户名是必填项->email:true->error:用户名格式错误" placeholder="用户名"  />
  </view>
  <view class="section">
    <view class="section__title"></view>
    <input name="name:password->require-error:密码是必填项->regex:^\\w{6,16}$->error:密码格式错误" placeholder="密码"  />
  </view>
  <view class="section">
    <view class="section__title"></view>
    <input name="name:sex" placeholder="性别"  />
  </view>
  <view class="btn-area">
    <button formType="submit">Submit</button>
    <button formType="reset">Reset</button>
  </view>
</form>

   JavaScript:

var checkout=require("../lib/checkout.js")
Page({
  formSubmit: function (e) {
    console.log(‘form发生了submit事件,携带数据为:‘, e.detail.value)
    checkout.formCheckout(e.detail.value, function (global) { //调用校验插件 e.detail.value:form表单返回值 ,function (global):校验 成功调用 
      console.log(global) //参数
      wx.request({ //接口
        url: ‘‘,
      })
    })

  },
  formReset: function () {
    console.log(‘form发生了reset事件‘)
  },
})

3.插件 :

  

function formCheckout(global, factory){
  var val = global, arr = [], data = {};
  var _RULES_={
    require:function(_value_){//必填项
      return  _value_["value"] != null && _value_["value"] != undefined && _value_["value"] != ""
    },
    "email": function (_value_) {//邮箱
      return /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(_value_["value"])
    },
    "mobile": function (_value_) {//手机号码
      return /^1(3|4|5|7|8)\d{9}$/.test(_value_["value"])
    },
    "phone": function (_value_) {//座机
      return /^0\d{2,3}-?\d{7,8}$/.test(_value_["value"])
    },
    "regex": function (_value_) {//正则表达式格式
      var regex = new RegExp(_value_["regex"])
      return regex.test(_value_["value"])
    }
  }
  for (var i in val) {
    console.log("i:" + i, "val:" + val[i])
    var _magArr_ = i.split("->")
    var _arr_ = new Object;
    _arr_.value = val[i];
    for (var j in _magArr_) {
      var config = _magArr_[j].split(":")
      _arr_[config[0]] = config[1]
    }
    console.log(_arr_)
    for (var k in _RULES_){
      console.log(_RULES_[k](_arr_), k == "require")
      if (_arr_["require-error"] && k =="require" &&!_RULES_[k](_arr_)) {
        showToast(_arr_["require-error"])
        return
      }
      if (_arr_[k] && !_RULES_[k](_arr_)){
        showToast(_arr_["error"])
        return
      }
      data[_arr_["name"]] = _arr_["value"];
    }
  }
  function showToast(title){
    wx.showToast({
      title: title,
      icon: ‘none‘,
      duration: 2000,
      mask:true
    })
  }
  factory(data)
}
module.exports = {
  formCheckout,//校验
}

 

另类的form表单校验插件js封装(小程序版)

上一篇:微信小程序上传大视频到七牛云-附七牛优惠码


下一篇:3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案微信小程序篇(学习网页_2)