成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

avalon2 非必填項(xiàng)的表單驗(yàn)證規(guī)則

Wuv1Up / 2515人閱讀

摘要:場(chǎng)景描述某表單中有一個(gè)郵箱的輸入框,但是為非必填項(xiàng),我們期望的結(jié)果不填寫(xiě)可以驗(yàn)證通過(guò)如果填寫(xiě)了郵箱驗(yàn)證郵箱格式代碼如下全部通過(guò)備用郵箱非必填提交未填寫(xiě)郵箱運(yùn)行結(jié)果沒(méi)有達(dá)到期望結(jié)果,如下圖方案重寫(xiě)驗(yàn)證規(guī)則官方有示例,可以自己重寫(xiě)一個(gè)驗(yàn)

場(chǎng)景描述
某表單中有一個(gè)郵箱的輸入框,但是為非必填項(xiàng),我們期望的結(jié)果
1. 不填寫(xiě)可以驗(yàn)證通過(guò)
1. 如果填寫(xiě)了郵箱,驗(yàn)證郵箱格式

代碼如下

未填寫(xiě)郵箱
【運(yùn)行結(jié)果】沒(méi)有達(dá)到期望結(jié)果,如下圖

方案1:重寫(xiě)驗(yàn)證規(guī)則
官方有示例,可以自己重寫(xiě)一個(gè)驗(yàn)證規(guī)則

代碼如下

未填寫(xiě)郵箱
【運(yùn)行結(jié)果】達(dá)到期望結(jié)果,如下圖

avalon內(nèi)置驗(yàn)證規(guī)則重寫(xiě),如下

function isRegExp(value) {
    return avalon.type(value) === "regexp"
}
var rmail = /^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/i
var rurl = /^(ftp|http|https)://(w+:{0,1}w*@)?(S+)(:[0-9]+)?(/|/([w#!:.?+=&%@!-/]))?$/
function isCorrectDate(value) {
    if (typeof value === "string" && value) { //是字符串但不能是空字符
        var arr = value.split("-") //可以被-切成3份,并且第1個(gè)是4個(gè)字符
        if (arr.length === 3 && arr[0].length === 4) {
            var year = ~~arr[0] //全部轉(zhuǎn)換為非負(fù)整數(shù)
            var month = ~~arr[1] - 1
            var date = ~~arr[2]
            var d = new Date(year, month, date)
            return d.getFullYear() === year && d.getMonth() === month && d.getDate() === date
        }
    }
    return false
}
avalon.shadowCopy(avalon.validators, {
    pattern: {
        message: "必須匹配{{pattern}}這樣的格式",
        get: function (value, field, next) {
            var elem = field.dom 
            var data = field.data
            if (!isRegExp(data.pattern)) {
                var h5pattern = elem.getAttribute("pattern")
                data.pattern = new RegExp("^(?:" + h5pattern + ")$")
            }
            next(value === "" || data.pattern.test(value))
            return value
        }
    },
    digits: {
        message: "必須整數(shù)",
        get: function (value, field, next) {//整數(shù)
            next(value === "" || /^-?d+$/.test(value))
            return value
        }
    },
    number: {
        message: "必須數(shù)字",
        get: function (value, field, next) {//數(shù)值
            next(value === "" || isFinite(value))
            return value
        }
    },
    date: {
        message: "日期格式不正確",
        get: function (value, field, next) {
            var data = field.data
            if (isRegExp(data.date)) {
                next(value === "" || data.date.test(value))
            } else {
                next(value === "" || isCorrectDate(value))
            }
            return value
        }
    },
    url: {
        message: "URL格式不正確",
        get: function (value, field, next) {
            next(value === "" || rurl.test(value))
            return value
        }
    },
    email: {
        message: "email格式不正確",
        get: function (value, field, next) {
            next(value === "" || rmail.test(value))
            return value
        }
    },
    minlength: {
        message: "最少輸入{{minlength}}個(gè)字",
        get: function (value, field, next) {
            var num = parseInt(field.data.minlength, 10)
            next(value === "" || (value.length >= num))
            return value
        }
    },
    min: {
        message: "輸入值不能小于{{min}}",
        get: function (value, field, next) {
            var num = parseInt(field.data.min, 10)
            next(value === "" || (parseFloat(value) >= num))
            return value
        }
    },
    max: {
        message: "輸入值不能大于{{max}}",
        get: function (value, field, next) {
            var num = parseInt(field.data.max, 10)
            next(value === "" || (parseFloat(value) <= num))
            return value
        }
    },
    chs: {
        message: "必須是中文字符",
        get: function (value, field, next) {
            next(value === "" || /^[u4e00-u9fa5]+$/.test(value))
            return value
        }
    }
})
方案2:修改源碼中addField方法
如果不想重寫(xiě)驗(yàn)證規(guī)則
修改源碼 avalon/src/directives/duplex/addValidateField.js
添加2行代碼,打包
運(yùn)行后結(jié)果達(dá)到預(yù)期
if (rules["required"] === undefined || rules["required"] === false)
    field.norequired = true;

如下圖

說(shuō)明:

這2行代碼是指 在"ms-rules"中沒(méi)有配置必填項(xiàng)"required"規(guī)則或"required"設(shè)置為false時(shí),
設(shè)置該field為非必填,field.norequired為true

在源碼 avalon/src/directives/duplex/addValidateField.js  中有這么一段代碼
                if (field.norequired && value === "") {
                    a = true
                }

如下圖紅框

此方案我自測(cè)是沒(méi)問(wèn)題的,但不知是否全面,希望avalon的后續(xù)版本會(huì)考慮此情況
歡迎指正

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/80296.html

相關(guān)文章

  • 【容器實(shí)例 Cube】創(chuàng)建詳解:快速創(chuàng)建教程

    摘要:創(chuàng)建詳解通過(guò)上面的快速創(chuàng)建我們接下來(lái)將通過(guò)上面的例子來(lái)進(jìn)行創(chuàng)建操作中的詳細(xì)設(shè)置說(shuō)明。高階設(shè)置高階設(shè)置中將針對(duì)容器進(jìn)行詳細(xì)的參數(shù)設(shè)置。掛載路徑卷名稱(chēng)注意如沒(méi)有創(chuàng)建卷設(shè)置,在掛載卷中將選擇不到具體的卷名稱(chēng),請(qǐng)先創(chuàng)建卷設(shè)置??焖賱?chuàng)建快速創(chuàng)建Cube實(shí)例點(diǎn)擊Cube的創(chuàng)建按鈕進(jìn)入創(chuàng)建頁(yè)面,為你的容器組起一個(gè)名字;選擇一個(gè)倉(cāng)庫(kù)內(nèi)的鏡像,這里快速創(chuàng)建我選擇的UCloud鏡像倉(cāng)庫(kù)nginx鏡像1.17.1...

    Tecode 評(píng)論0 收藏0
  • Vue_VueValidator

    摘要:驗(yàn)證結(jié)果會(huì)保存在組建實(shí)例的屬性下。表單整體校驗(yàn)結(jié)果和單個(gè)字段校驗(yàn)結(jié)果。郵政編碼是必填項(xiàng)對(duì)象字面量對(duì)象字面量語(yǔ)法適合需要額外參數(shù)的校驗(yàn)器。如限制輸入長(zhǎng)度的校驗(yàn)器需要說(shuō)明限制長(zhǎng)度多少。這樣可以用來(lái)動(dòng)態(tài)綁定校驗(yàn)規(guī)則。例如重復(fù)密碼功能。 Vue-validator 是Vue的表單驗(yàn)證插件 Vue版本:1.0.24Vue-validator版本:2.1.3 基本使用 ...

    Baoyuan 評(píng)論0 收藏0
  • element-ui設(shè)置下拉選擇切換必填必填

    摘要:需求默認(rèn)都是必選下拉選擇的時(shí)候選擇必填,活動(dòng)名稱(chēng)為必填,需要校驗(yàn)和顯示選擇非必填,活動(dòng)名稱(chēng)不做校驗(yàn),隱藏初始校驗(yàn)規(guī)則經(jīng)測(cè)試,網(wǎng)上其他的方式都沒(méi)有實(shí)現(xiàn)需求,動(dòng)態(tài)切換中的沒(méi)有作用因?yàn)榘凑找韵碌膶?xiě)法的話(huà),在組件初始化后校驗(yàn)規(guī)則就定型了,切換也沒(méi) ? 需求 默認(rèn)都是必選 下拉選擇的時(shí)候 選擇必填,活動(dòng)名稱(chēng)為必填,需要校驗(yàn)和顯示* 選擇非必填,活動(dòng)名稱(chēng)不做校驗(yàn),隱藏* showImg(https...

    junbaor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<