1
^([-+]?)([\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+))?)$/)" 

反正有没有得到这个工作?

+0

发布理解的完整代码。 – Rahul

回答

2

您需要将转义的反斜杠加倍,但说实话,您的表达式包含太多冗余的分组结构。

使用

.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

非常感谢。正是我在找什么。它很棒! –