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})?))$/)"
}
}
我想在我的 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})?))$/)"
}
}