Regex Firebase matches()不';我不能使用正则表达式

Regex Firebase matches()不';我不能使用正则表达式,regex,firebase,firebase-realtime-database,firebase-security,Regex,Firebase,Firebase Realtime Database,Firebase Security,我想在firebase验证规则中实现这个正则表达式(它检查坐标纬度)。这是我的代码: "coordinate": { "latitude": { ".validate": "newData.isString() && newData.val().matches(/^(\\+|-)?(?:90(?:(?:\\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\\.[0-9]{1,6})?))$/)" } } 我转义了+和,因

我想在firebase验证规则中实现这个正则表达式(它检查坐标纬度)。这是我的代码:

"coordinate": {
    "latitude": {
        ".validate": "newData.isString() && newData.val().matches(/^(\\+|-)?(?:90(?:(?:\\.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:\\.[0-9]{1,6})?))$/)"
    }
}
我转义了
+
,因此有两个反斜杠
\+
\\。


但是这个代码不起作用。当我试图编写一个正确的纬度时,我遇到了一个错误
FIREBASE警告:在/failed:permission\u 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})?))$/)"
  }
}

你有写权限吗?是的,当我删除latitude的验证时,一切都很好。在正则表达式文本中,而不是字符串文本中,你只需要一个反斜杠来转义
+
。您的
\\+
正在尝试匹配一个或多个反斜杠。但在保存(发布)过程中,我收到一个错误:
错误保存规则-第18行:无效转义:'\+'
我的错误。你是对的。它是JSON,因此反斜杠被转义。