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位数字 -
[.]
- a dot 个
-
[0-9]+
- 1+数字 -
,
- 逗号 -
[-+]?
- 1或0+
或-
-
[0-9]{1,3}
- 1至3位数 -
([.][0-9]+)?
- 1或.
0序列和1+数字(请注意,不支持非捕获组) -
$
- 字符串锚定的结尾(仅当模式结束时,$
与Firebase正则表达式中字符串的结尾相匹配)。
+0
非常感谢。正是我在找什么。它很棒! –
发布理解的完整代码。 – Rahul