小程序模板網(wǎng)

小程序form表單校驗(yàn)插件js封裝

發(fā)布時(shí)間:2021-06-19 18:05 所屬欄目:小程序開發(fā)教程

一、封裝的目的

  1.復(fù)用性

  2.方便調(diào)用

二、分析:

  1.微信小程序表單提交數(shù)據(jù)只會(huì)返回綁定name的value

  2.配置:網(wǎng)上有很多表單的校驗(yàn)插件 但是大部分的配置都是在js  新增正則對(duì)象 ,我感覺不太簡(jiǎn)便,就構(gòu)思了這個(gè)另類校驗(yàn)插件 

三、原理:

  很簡(jiǎn)單,就是將配置換個(gè)地方,將配置更換至HTML input中

四、實(shí)現(xiàn):

  1.配置規(guī)則:

<input name="name:user->require-error:用戶名是必填項(xiàng)->email:true->error:用戶名格式錯(cuò)誤" placeholder="用戶名"  />

    1.name:user //對(duì)應(yīng)接口data的鍵

    2.require-error:用戶名是必填項(xiàng) // 必填項(xiàng)提示 大部分插件不僅要配置 require:true 必填項(xiàng) 還要配置 require-error 必填項(xiàng)提示 我認(rèn)為 只要配置了必填項(xiàng)提示  該input 框就是必填項(xiàng) 

    3.email:true //插件已配置的 常用正則驗(yàn)證  用戶也可以在插件中配置自己常用的正則表達(dá)式 我這里還配置了  mobile (手機(jī)號(hào))、phone(座機(jī)號(hào))

    4.regex:^\\w{6,16}$ //現(xiàn)在開發(fā)過(guò)程中頁(yè)面也可能有不常用的正則 ,一直在源碼中擴(kuò)充回導(dǎo)致插件越來(lái)越大,也比較麻煩 ,為方便使用用戶也可在頁(yè)面中直接配置正則表達(dá)式 

     注意:在頁(yè)面中配置 一定注意字符轉(zhuǎn)義  這個(gè)問(wèn)題坑了我10多分鐘 在pc端沒問(wèn)題 在小程序 輸入的值一直校驗(yàn)失敗

    5.error:用戶名格式錯(cuò)誤 //正則匹配錯(cuò)誤提示 

    6.用->連接是因?yàn)檎齽t中也有使用逗號(hào)等符號(hào) 所以選擇-> ,如果在正則中有->在插件源碼更換即可

  2.頁(yè)面:

    HTML:

 


<form bindsubmit="formSubmit" bindreset="formReset" >
  <view class="section">
    <view class="section__title"></view>
    <input name="name:user->require-error:用戶名是必填項(xiàng)->email:true->error:用戶名格式錯(cuò)誤" placeholder="用戶名"  />
  </view>
  <view class="section">
    <view class="section__title"></view>
    <input name="name:password->require-error:密碼是必填項(xiàng)->regex:^\\w{6,16}$->error:密碼格式錯(cuò)誤" 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>


var checkout=require("../lib/checkout.js")
Page({
  formSubmit: function (e) {
    console.log('form發(fā)生了submit事件,攜帶數(shù)據(jù)為:', e.detail.value)
    checkout.formCheckout(e.detail.value, function (global) { //調(diào)用校驗(yàn)插件 e.detail.value:form表單返回值 ,function (global):校驗(yàn) 成功調(diào)用 
      console.log(global) //參數(shù)
      wx.request({ //接口
        url: '',
      })
    })

  },
  formReset: function () {
    console.log('form發(fā)生了reset事件')
  },
})

3.插件 :

  


function formCheckout(global, factory){
  var val = global, arr = [], data = {};
  var _RULES_={
    require:function(_value_){//必填項(xiàng)
      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_) {//手機(jī)號(hào)碼
      return /^1(3|4|5|7|8)\d{9}$/.test(_value_["value"])
    },
    "phone": function (_value_) {//座機(jī)
      return /^0\d{2,3}-?\d{7,8}$/.test(_value_["value"])
    },
    "regex": function (_value_) {//正則表達(dá)式格式
      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,//校驗(yàn)
}


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://22321a.com/wxmini/doc/course/26567.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢