Javascript Firebase验证规则正则表达式不工作

Javascript Firebase验证规则正则表达式不工作,javascript,regex,validation,firebase-realtime-database,firebase-security,Javascript,Regex,Validation,Firebase Realtime Database,Firebase Security,我不能让它在Firebase模拟器中工作,我不明白为什么。我在我的页面上做了一个“收藏”按钮,上面有一个计数器,可以记录它被收藏的次数。我想将金额存储在firebase数据库中。以下是我的规则: { "rules": { "favorited": { ".validate": "newData.isNumber() && newData.val().matches(/[0-9]/) && newData.val().length <

我不能让它在Firebase模拟器中工作,我不明白为什么。我在我的页面上做了一个“收藏”按钮,上面有一个计数器,可以记录它被收藏的次数。我想将金额存储在firebase数据库中。以下是我的规则:

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


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

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

从:

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

您可以使用:

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

因为
100000000
是包含10位数字的最小数字。

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

从:

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

您可以使用:

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

As
100000000
是其中有10位数字的最小数字。

Aha我明白了。但这仍然给了我一个写入错误,看:或者现在键也必须是一个数字吗?那是因为您正在写入一个对象-
{“templateFavorite”:123}
-并且它没有通过
isNumber
验证。试着写一个数字,比如
123
,或者更新你的规则以包含
模板收藏夹
子项。太棒了,现在我明白我做错了什么。非常感谢。啊哈,我明白了。但这仍然给了我一个写入错误,看:或者现在键也必须是一个数字吗?那是因为您正在写入一个对象-
{“templateFavorite”:123}
-并且它没有通过
isNumber
验证。试着写一个数字,比如
123
,或者更新你的规则以包含
模板收藏夹
子项。太棒了,现在我明白我做错了什么。非常感谢。
newData.isNumber() && newData.val() < 1000000000