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

非常感謝。正是我在找什麼。它很棒! –