如何在Firebase Bolt中验证数组内所有字符串匹配指定正则?
Firebase Bolt验证数组内所有字符串匹配正则的实现方法
问题背景
在Firebase实时数据库安全规则中,单个字符串匹配正则可以用以下规则:
".validate": "newData.val().matches(/#(?:[A-Fa-f0-9]{3}){1,2}\\b/)"
使用Firebase Bolt编译器时,单个字符串的验证代码如下:
validate() { this.background_colors.test(/#(?:[A-Fa-f0-9]{3}){1,2}\b/) }
但当background_colors是字符串数组时,需要验证数组内每个元素都符合该正则,尝试用each遍历的写法无法通过编译器检查,需找到正确实现方式。
正确实现方案
在Firebase Bolt中,要验证数组所有元素满足条件,需使用every方法(而非each)——each仅执行遍历操作,不会返回验证结果,而every会检查所有元素是否符合条件,返回布尔值供验证逻辑使用。
修改后的验证代码如下:
validate() { this.background_colors.every((color) => { return color.test(/#(?:[A-Fa-f0-9]{3}){1,2}\b/); }); }
原理说明
every方法遍历数组每个元素,对每个元素执行传入的回调函数- 仅当所有元素的回调都返回
true时,every才返回true,验证通过 - 若任意一个元素不满足条件,
every立即返回false,验证失败
注意正则中的转义问题:Bolt代码里\b直接写即可,JSON规则中则需要双转义为\\b。
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

