数据校验
本篇文档介绍使用规则表达式校验数据的合法性,只允许写入符合规则的数据。
设置校验规则
Section titled “设置校验规则”.validate 规则类型用于设置允许写入的数据格式和数据类型。
例如,限制写入 /foo 的数据必须是字符串类型且长度小于100:
{ "messages:"{ "rules": { "content": { ".read": true, ".write": true, // 写入/foo 的数据必须是字符串类型且长度小于100。 ".validate": "newData.isString() && newData.val().length() < 100" } } }}注意:
- 任何一个子节点的 `.validate` 规则校验失败,整个写操作都将失败;
- 当删除节点时,`.validate` 表达式会被忽略。
data 和 newData
Section titled “data 和 newData”内置对象 data 用于获取数据操作前的原始数据。newData 用于获取数据操作之后的新数据。
例如,设置在指定节点下,不可以修改数据:
// 可以写入数据或删除数据,但不能修改已有数据。".validate": "!data.exists() || !newData.exists()"定位到任一节点
Section titled “定位到任一节点”内置变量 root,data 和 newData 的 parent() 和 child()方法用于定位到任一节点。
例如,电影评分超过 8 分,且电影已上映 ,那么可以收藏这部电影:
{ ".validate": "root.child('movie').val().exists() && data.parent().child('score').val() > 8 && newData.parent.child('isShow').val() === true "}正则表达式校验数据
Section titled “正则表达式校验数据”matches() 方法用于规则表达式正则校验。
例如,限制写入的数据是字符串,并且字符串是 1900-2099 年间的 YYYY-MM-DD 格式:
".validate": "newData.isString() && newData.val().matches(/^(19|20)[0-9][0-9][-\\/. ](0[1-9]|1[012])[-\\/. ](0[1-9]|[12][0-9]|3[01])$/)"关于正则表达式校验的更多内容,请参考 API 文档。