Firebase 实时数据库规则-检查给定数组是否包含newData.val()

Firebase 实时数据库规则-检查给定数组是否包含newData.val(),firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我的RTDB中有一个属性,它只能是以下属性之一:false、5、15、30、60 因此,我尝试以多种方式编写此条件,但没有成功: // Like in Firestore rules: ".write": "newData().val() in [false, 5, 15, 30, 60]" // Like in ES6: ".write": "[false, 5, 15, 30, 60].includes(newData().val())" // Like the old way: ".w

我的RTDB中有一个属性,它只能是以下属性之一:
false、5、15、30、60

因此,我尝试以多种方式编写此条件,但没有成功:

// Like in Firestore rules:
".write": "newData().val() in [false, 5, 15, 30, 60]"

// Like in ES6:
".write": "[false, 5, 15, 30, 60].includes(newData().val())"

// Like the old way:
".write": "[false, 5, 15, 30, 60].indexOf(newData().val()) > -1"
所以我最终得到了:

".write": "(newData.val() === false || newData.val() === 5 || newData.val() === 15 || newData.val() === 30 || newData.val() === 60"

是否有任何方法可以检查
newData.val()
是否等于所提到的值之一,而不需要太多的样板文件?

压缩此值的一种方法是使用正则表达式。因此,根据您的示例,您可以使用
“.write:”(newData.val()+“”).matches(/^(false | 5 | 15 | 30 | 60)$/)”

但是,您可能希望对数据类型更严格一些,因此这样做比较理想:
”.write:“newData.val()===false | | |(newData.isNumber()&&&(newData.val()+)。matches(/^(5 | 15 | 30 | 60)$/)”


这里有一把小提琴演示了这一行为:

你最终得到的规则是我如何写它。