You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询Firebase Realtime DB Rules中解析写入值及字符截取的可行性

Firebase Realtime数据库规则:解析写入值的正确写法

你提到的两种需求都可以通过Firebase安全规则的字符串操作实现,但你当前的写法存在语法错误,以下是修正后的可行方案:

1. 移除:及之后的内容

要从写入值(如2022090800:29)中去掉冒号及后面的部分,可通过两种方式实现:

方案1:用split()分割字符串

"write": "(root.child('Game/' + newData.val().split(':')[0] + '/isPlayed').val() == false)"

split(':')会将字符串按冒号分割为数组,[0]取数组第一个元素,即冒号前的目标内容。

方案2:用replace()正则匹配替换

"write": "(root.child('Game/' + newData.val().replace(/:.*/, '') + '/isPlayed').val() == false)"

正则/:.*会匹配冒号及后续所有字符,替换为空字符串后即可得到冒号前的内容。

2. 仅取值的前10个字符校验

要提取字符串的前10个字符,需使用substring()方法(Firebase规则中length是获取字符串长度的属性,不能直接用于截取):

"write": "(root.child('Game/' + newData.val().substring(0, 10) + '/isPlayed').val() == false)"

substring(0,10)会截取从索引0到9的字符(共10个),正好对应你需要的前10位内容。

额外提示

  • 若写入值可能是数字类型,需先转为字符串:newData.val().toString()
  • 若存在写入值为空或长度不足10的情况,建议添加判断避免报错,例如:
    "write": "(newData.val().length >= 10 && root.child('Game/' + newData.val().substring(0, 10) + '/isPlayed').val() == false)"
    

内容的提问来源于stack exchange,提问作者Learn2Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:35:24