【问题标题】:Firebase validate rule regex not workingFirebase 验证规则正则表达式不起作用
【发布时间】:2017-01-07 08:36:09
【问题描述】:

我无法让它在 Firebase 模拟器中运行,我不明白为什么。我在我的页面上制作了一个“收藏”按钮,并带有一个计数器,可以跟踪它被收藏的次数。我想将金额存储在 firebase 数据库中。所以这是我的规则:

{
  "rules": {
    "favorited": {
      ".validate": "newData.isNumber() && newData.val().matches(/[0-9]/) && newData.val().length < 10",
      ".read": true,
      ".write": true
    }
  }
}

写入应该是一个整数,只能包含 0 到 9 并且少于 10 个字符。

我已经在以下路径上使用以下 JSON 数据对其进行了测试:

/favorited/

--

{
  "foo": 123
}

这会在验证时出现写入错误。我做错了什么?

【问题讨论】:

    标签: javascript regex validation firebase-realtime-database firebase-security


    【解决方案1】:

    问题是您在数字上使用正则表达式,而不是字符串。而且数字也没有length 属性。

    来自documentation

    正则表达式文字可用于验证客户端提供的字符串。使用string.matches(/pattern/) 测试字符串是否符合正则表达式模式。

    你可以使用:

    newData.isNumber() && newData.val() < 1000000000
    

    1000000000 是最小的 10 位数字。

    【讨论】:

    • 啊哈,我明白了。但这仍然给我一个写入错误,看:baasdesign.nl/images/firebase.png 或者现在密钥也必须是数字吗?
    • 那是因为您正在编写一个对象 - { "templateFavorite": 123 } - 它没有通过 isNumber 验证。试着写一个数字——比如123——或者更新你的规则以包含templateFavorite子。
    • 太棒了,现在我明白我做错了什么。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2021-06-18
    • 2018-11-29
    • 2014-04-21
    • 1970-01-01
    相关资源
    最近更新 更多