首页 > 解决方案 > Firestore 数据库规则中的 ID 匹配

问题描述

我正在制定我的安全规则,但是当我尝试将文档 ID 与正则表达式匹配时,它不起作用。我尝试使用该matches功能,但它似乎不接受该方法。

即使我尝试从此处/^(19|20)[0-9][0-9][-\\/. ](0[1-9]|1[012])[-\\/. ](0[1-9]|[12][0-9]|3[01])$/使用 Firebase 模式 YYYY-MM-DD ( ) ,但它也不起作用(我尝试使用 1950-01-01)。

在此处输入图像描述

我正在尝试检查roomId这种模式 ( /^(\\d){6,}#[a-zA-Z0-9]{65,}$/)

编辑:我尝试删除" "正则表达式周围的,但它给了我这个错误:mismatched input ')' expecting {'{', '/', PATH_SEGMENT}

在此处输入图像描述

(我知道正则表达式没问题,但我不知道为什么它在我编写的代码中不起作用)

标签: regexfirebasegoogle-cloud-firestore

解决方案


您在实时数据库和 Firestore 之间混淆了语法。

在实时数据库安全规则中,正则表达式特定于 JavaScript 正则表达式,因此包含在/打开和关闭中。

在 Firestore 安全规则中,正则表达式需要作为字符串传递,这也意味着它不应包含在/符号中。

所以:

allow create: if docId.matches("^(19|20)[0-9][0-9][-\\/. ](0[1-9]|1[012])[-\\/. ](0[1-9]|[12][0-9]|3[01])$");

在此处输入图像描述


推荐阅读