Firebase matches() 不适用于正则表达式

Firebase matches() doesn't work with regex

我想在我的 firebase 验证规则中实施此正则表达式 https://regex101.com/r/9m7vMC/1/(它检查坐标纬度)。这是我的代码:

"coordinate": {
    "latitude": {
        ".validate": "newData.isString() && newData.val().matches(/^(\+|-)?(?:90(?:(?:\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\.[0-9]{1,6})?))$/)"
    }
}

我转义了+.,所以有双反斜杠\+\.

但是这段代码不起作用。当我尝试输入正确的纬度时出现错误 FIREBASE WARNING: update at / failed: permission_denied

问题出在正则表达式中的非捕获组 (?:)。

我记得我在 Firebase 数据库中用于验证 ISO 8601 次的正则表达式也有类似的问题。将非捕获组更改为捕获组解决了我的问题。

要用捕获组替换非捕获组,只需从正则表达式中删除 ?: 的使用:

"coordinate": {
  "latitude": {
    ".validate": "newData.isString() && newData.val().matches(/^(\+|-)?(90((\.0{1,6})?)|([0-9]|[1-8][0-9])((\.[0-9]{1,6})?))$/)"
  }
}