Firebase 规则正则表达式问题
Firebase rules regex troubles
^([-+]?)([\d]{1,2})(((\.)(\d+)(,)))(([-+]?)([\d]{1,3})((\.)(\d+))?)$
我正在尝试使用上面的正则表达式来确认数据是有效坐标。我无法让它与 Firebase 规则一起使用。当我 运行 在线正则表达式测试器中的正则表达式时,它工作正常,但 Firebase 规则似乎不接受它。
这是我的 firebase 规则:
".validate": "newData.isString() && newData.val().matches(/^([-+]?)([\d]{1,2})(((\.)(\d+)(,)))(([-+]?)([\d]{1,3})((\.)(\d+))?)$/)"
有没有办法让这个工作?
您需要加倍转义反斜杠,但老实说,您的表达式包含太多冗余分组结构。
使用
.matches(/^[-+]?\d{1,2}\.\d+,[-+]?\d{1,3}(\.\d+)?$/)
或完全避免反斜杠:
.matches(/^[-+]?[0-9]{1,2}[.][0-9]+,[-+]?[0-9]{1,3}([.][0-9]+)?$/)
正则表达式将匹配字符串 like in this online demo。
详情:
^
- 字符串的开头(在 Firebase regex 中,它是仅在模式开头使用时的锚点)
[-+]?
- 1 或 0 +
或 -
[0-9]{1,2}
- 1 或 2 个数字
[.]
- 一个点
[0-9]+
- 1+ 位数
,
- 逗号
[-+]?
- 1 或 0 +
或 -
[0-9]{1,3}
- 1 到 3 位数
([.][0-9]+)?
- .
和 1+ 数字的 1 或 0 个序列(注意不支持非捕获组)
$
- 字符串锚点的结尾(仅当在模式结尾时,$
匹配 Firebase 正则表达式中的字符串结尾)。
^([-+]?)([\d]{1,2})(((\.)(\d+)(,)))(([-+]?)([\d]{1,3})((\.)(\d+))?)$
我正在尝试使用上面的正则表达式来确认数据是有效坐标。我无法让它与 Firebase 规则一起使用。当我 运行 在线正则表达式测试器中的正则表达式时,它工作正常,但 Firebase 规则似乎不接受它。
这是我的 firebase 规则:
".validate": "newData.isString() && newData.val().matches(/^([-+]?)([\d]{1,2})(((\.)(\d+)(,)))(([-+]?)([\d]{1,3})((\.)(\d+))?)$/)"
有没有办法让这个工作?
您需要加倍转义反斜杠,但老实说,您的表达式包含太多冗余分组结构。
使用
.matches(/^[-+]?\d{1,2}\.\d+,[-+]?\d{1,3}(\.\d+)?$/)
或完全避免反斜杠:
.matches(/^[-+]?[0-9]{1,2}[.][0-9]+,[-+]?[0-9]{1,3}([.][0-9]+)?$/)
正则表达式将匹配字符串 like in this online demo。
详情:
^
- 字符串的开头(在 Firebase regex 中,它是仅在模式开头使用时的锚点)[-+]?
- 1 或 0+
或-
[0-9]{1,2}
- 1 或 2 个数字[.]
- 一个点[0-9]+
- 1+ 位数,
- 逗号[-+]?
- 1 或 0+
或-
[0-9]{1,3}
- 1 到 3 位数([.][0-9]+)?
-.
和 1+ 数字的 1 或 0 个序列(注意不支持非捕获组)$
- 字符串锚点的结尾(仅当在模式结尾时,$
匹配 Firebase 正则表达式中的字符串结尾)。