Google Cloud Firestore安全规则中正确的正则表达式语法是什么?

时间:2018-04-26 17:22:20

标签: regex firebase google-cloud-firestore firebase-security re2

编辑:在https://stackoverflow.com/a/44876864/6792075查看答案后,我仍然不知道为什么有必要使用'\\.'双倍逃避这段时间,特别是因为文档清楚地显示{{1}是预期的语法(参见下面的第二个例子)。答案也引用了第一个例子('\.'),但是用双重转义('.*\..*')进行了修改,但我相信这仍然会因为我在下面描述的原因而失败。

我正在尝试在句点字符上拆分字符串'.*\\..*',但Firestore安全规则文档与规则编辑器中允许的语法之间存在一些差异。

安全规则为字符串提供memberUIDs.some_ID_here方法:https://firebase.google.com/docs/firestore/reference/security/#split

.split()

在文档中还有一个示例显示了对句点字符的拆分,使用了不同的正则表达式:

// Allow documents named "user.*" to be uploaded
match /{document} {
  allow write: if user.split('.*\..*')[0] == 'user'
}

第一个问题是第一个例子。如果您实际使用此正则表达式,它将匹配整个字符串,这将不允许您拆分句点字符;它将整个字符串作为分隔符,从而产生一个包含两个空字符串的数组。

第二个问题是第二个例子。这个正则表达式应该可以正常工作,它适用于在线正则表达式编辑器的测试;但是,当在// Allow read if a document has the string 'user' in it match /{document} { allow read: if 'user' in document.split('\.'); } 函数中使用时,规则编辑器会在此正则表达式上抛出语法错误。实际上,如果您尝试在任何地方使用字符串split(),编辑器会抛出语法错误。

现在,我正在使用'\.'作为我的正则表达式,它不会在编辑器中触发语法错误,但我认为这不正常:

'\\.'

似乎文档错误,编辑器的语法检查工作不正常,或者我从根本上误解了安全规则的工作原理。

以下是发生语法错误的屏幕截图:

Here is a screenshot of the syntax error occurring

0 个答案:

没有答案