自研低代码开发平台,深度表单数据校验的表达式语法实现
开发一个开发软件的软件平台。
本平台为支持用户作深度、复杂的业务应用系统定制开发而设计。用户数据表单定制是其中最基本常用的功能,实际需求中不仅要支持复杂结构的页面定制,而且需支持数据输入的复杂逻辑管控,必须考虑实际应用中可能面临的各种不可预知且复杂的表单数据校验需求。常见的业务场景要求:
1、单数据校验
最简单的方式,校验单数据的内容合法性,例如数据最大长度、最小长度、数据类型等基本要求,以及邮箱地址、手机号码等特定内容格式的要求。
2、多数据逻辑关系校验
不只是对数据内容格式本身进行约束,而且需处理多个数据之间的关系,结合实际业务逻辑进行数据合法性校验,例如表单中存在单价、数量、总价的字段(假设不作自动计算),必须确保用户输入的总价等于数量乘以数量。
3、接口数据交互逻辑
用户的一个数据输入的有效性可能需要与外部数据接口作交互验证,例如输入的员工工号需调用服务器后端接口校验此工号的员工是否存在、有效。
为满足各类有可能的复杂应用需求场景,并易于便捷使用,特设计了一套数据校验机制,数据校验抽象为以下几部分:
1、触发时机
2、提示方式
3、校验类型
4、校验顺序
5、校验逻辑
数据校验规则支持Json方式定义和字符串表达式定义,Json方式适用于面向编程开发的应用,字符串表达式的方式适用于面向普通用户基于配置化的设置,系统提供可视化的前端设置功能,使得无IT技术背景的普通用户也能无师自通玩转,在此重点说明表达式语法。
表达式示例:
@change!after:len(>1)&len(<21)&min(n4)&max(n8)®((.jpg|.png)$)&(func({return true})|type(s))|type(n)
表达式组成要素:
1、触发时机,支持数据变化时立即触发、焦点变化时触发、表单提交前触发,语法为:
@change
@blur
@submit 默认,未指定时在表单提交前触发
所有指定了需作校验的数据至少在表单提交前须校验一次。
2、提示方式
当数据校验失败后,向用户提示信息的方式,支持表单域中直接提示和以交互方式进行提示,语法:
!info 默认,弹出提示消息停留几秒后自动消息
!confirm,弹出对话框消息,强制用户阅读手工关闭
!top,在表单域尾部插入提示消息文本
!bottom,在表单域底部插入提示消息文本
!after,在表单域顶部插入提示消息文本
3、校验类型
以函数形式语法表示数据内容规则
len,长度规则,参数为比较符加数字,如(>1)表示长度大于1,例如设置必填:len(>0)
min,最小值规则,支持数值、字符串、日期型的值比较,参数首字符为数据类型,s:字符串,n数字,d日期
max,最大值规则,同min
type,数据类型规则,参数为单字符,s:字符串,n数字,d日期,…
reg,正则表达式规则,用以实现任何内容格式要求的校验,例如手机号、邮箱等,常用类型可内置预留也可由用户在前端自行配置自动生成
func,自定义校验规则函数,支持多数据间的关系校验以及外部数据接口的校验
4、数据校验顺序
支持多个规则间的“与”、“或”、“括号”逻辑运算,括号优先级最高,其次是与运算,最后是或运算,以同一级下各局部运算规则按表达式书写顺序。
5、表达式语法解析
表达式语法采用非严格书写方式,支持无限多的层级括号和多个逻辑运算的任意关系组合嵌套,可以任意使用大小写、空格、换行,系统自动作标准格式转换。