一、封裝的目的
1.復用性
2.方便調用
二、分析:
1.微信小程序表單提交數(shù)據(jù)只會返回綁定name的value
2.配置:網(wǎng)上有很多表單的校驗插件 但是大部分的配置都是在js 新增正則對象 ,我感覺不太簡便,就構思了這個另類校驗插件
三、原理:
很簡單,就是將配置換個地方,將配置更換至HTML input中
四、實現(xiàn):
1.配置規(guī)則:
<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}$ //現(xiàn)在開發(fā)過程中頁面也可能有不常用的正則 ,一直在源碼中擴充回導致插件越來越大,也比較麻煩 ,為方便使用用戶也可在頁面中直接配置正則表達式
注意:在頁面中配置 一定注意字符轉義 這個問題坑了我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>
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) { //調用校驗插件 e.detail.value:form表單返回值 ,function (global):校驗 成功調用 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_){//必填項 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,//校驗 }