自研低代碼開發(fā)平臺(tái),深度表單數(shù)據(jù)校驗(yàn)的表達(dá)式語(yǔ)法實(shí)現(xiàn)
開發(fā)一個(gè)開發(fā)軟件的軟件平臺(tái)。
本平臺(tái)為支持用戶作深度、復(fù)雜的業(yè)務(wù)應(yīng)用系統(tǒng)定制開發(fā)而設(shè)計(jì)。用戶數(shù)據(jù)表單定制是其中最基本常用的功能,實(shí)際需求中不僅要支持復(fù)雜結(jié)構(gòu)的頁(yè)面定制,而且需支持?jǐn)?shù)據(jù)輸入的復(fù)雜邏輯管控,必須考慮實(shí)際應(yīng)用中可能面臨的各種不可預(yù)知且復(fù)雜的表單數(shù)據(jù)校驗(yàn)需求。常見的業(yè)務(wù)場(chǎng)景要求:
1、單數(shù)據(jù)校驗(yàn)
最簡(jiǎn)單的方式,校驗(yàn)單數(shù)據(jù)的內(nèi)容合法性,例如數(shù)據(jù)最大長(zhǎng)度、最小長(zhǎng)度、數(shù)據(jù)類型等基本要求,以及郵箱地址、手機(jī)號(hào)碼等特定內(nèi)容格式的要求。
2、多數(shù)據(jù)邏輯關(guān)系校驗(yàn)
不只是對(duì)數(shù)據(jù)內(nèi)容格式本身進(jìn)行約束,而且需處理多個(gè)數(shù)據(jù)之間的關(guān)系,結(jié)合實(shí)際業(yè)務(wù)邏輯進(jìn)行數(shù)據(jù)合法性校驗(yàn),例如表單中存在單價(jià)、數(shù)量、總價(jià)的字段(假設(shè)不作自動(dòng)計(jì)算),必須確保用戶輸入的總價(jià)等于數(shù)量乘以數(shù)量。
3、接口數(shù)據(jù)交互邏輯
用戶的一個(gè)數(shù)據(jù)輸入的有效性可能需要與外部數(shù)據(jù)接口作交互驗(yàn)證,例如輸入的員工工號(hào)需調(diào)用服務(wù)器后端接口校驗(yàn)此工號(hào)的員工是否存在、有效。
為滿足各類有可能的復(fù)雜應(yīng)用需求場(chǎng)景,并易于便捷使用,特設(shè)計(jì)了一套數(shù)據(jù)校驗(yàn)機(jī)制,數(shù)據(jù)校驗(yàn)抽象為以下幾部分:
1、觸發(fā)時(shí)機(jī)
2、提示方式
3、校驗(yàn)類型
4、校驗(yàn)順序
5、校驗(yàn)邏輯
數(shù)據(jù)校驗(yàn)規(guī)則支持Json方式定義和字符串表達(dá)式定義,Json方式適用于面向編程開發(fā)的應(yīng)用,字符串表達(dá)式的方式適用于面向普通用戶基于配置化的設(shè)置,系統(tǒng)提供可視化的前端設(shè)置功能,使得無IT技術(shù)背景的普通用戶也能無師自通玩轉(zhuǎn),在此重點(diǎn)說明表達(dá)式語(yǔ)法。
表達(dá)式示例:
@change!after:len(>1)&len(<21)&min(n4)&max(n8)®((.jpg|.png)$)&(func({return true})|type(s))|type(n)
表達(dá)式組成要素:
1、觸發(fā)時(shí)機(jī),支持?jǐn)?shù)據(jù)變化時(shí)立即觸發(fā)、焦點(diǎn)變化時(shí)觸發(fā)、表單提交前觸發(fā),語(yǔ)法為:
@change
@blur
@submit 默認(rèn),未指定時(shí)在表單提交前觸發(fā)
所有指定了需作校驗(yàn)的數(shù)據(jù)至少在表單提交前須校驗(yàn)一次。
2、提示方式
當(dāng)數(shù)據(jù)校驗(yàn)失敗后,向用戶提示信息的方式,支持表單域中直接提示和以交互方式進(jìn)行提示,語(yǔ)法:
!info 默認(rèn),彈出提示消息停留幾秒后自動(dòng)消息
!confirm,彈出對(duì)話框消息,強(qiáng)制用戶閱讀手工關(guān)閉
!top,在表單域尾部插入提示消息文本
!bottom,在表單域底部插入提示消息文本
!after,在表單域頂部插入提示消息文本
3、校驗(yàn)類型
以函數(shù)形式語(yǔ)法表示數(shù)據(jù)內(nèi)容規(guī)則
len,長(zhǎng)度規(guī)則,參數(shù)為比較符加數(shù)字,如(>1)表示長(zhǎng)度大于1,例如設(shè)置必填:len(>0)
min,最小值規(guī)則,支持?jǐn)?shù)值、字符串、日期型的值比較,參數(shù)首字符為數(shù)據(jù)類型,s:字符串,n數(shù)字,d日期
max,最大值規(guī)則,同min
type,數(shù)據(jù)類型規(guī)則,參數(shù)為單字符,s:字符串,n數(shù)字,d日期,…
reg,正則表達(dá)式規(guī)則,用以實(shí)現(xiàn)任何內(nèi)容格式要求的校驗(yàn),例如手機(jī)號(hào)、郵箱等,常用類型可內(nèi)置預(yù)留也可由用戶在前端自行配置自動(dòng)生成
func,自定義校驗(yàn)規(guī)則函數(shù),支持多數(shù)據(jù)間的關(guān)系校驗(yàn)以及外部數(shù)據(jù)接口的校驗(yàn)
4、數(shù)據(jù)校驗(yàn)順序
支持多個(gè)規(guī)則間的“與”、“或”、“括號(hào)”邏輯運(yùn)算,括號(hào)優(yōu)先級(jí)最高,其次是與運(yùn)算,最后是或運(yùn)算,以同一級(jí)下各局部運(yùn)算規(guī)則按表達(dá)式書寫順序。
5、表達(dá)式語(yǔ)法解析
表達(dá)式語(yǔ)法采用非嚴(yán)格書寫方式,支持無限多的層級(jí)括號(hào)和多個(gè)邏輯運(yùn)算的任意關(guān)系組合嵌套,可以任意使用大小寫、空格、換行,系統(tǒng)自動(dòng)作標(biāo)準(zhǔn)格式轉(zhuǎn)換。