【问题标题】:Firebase rules regex troublesFirebase 规则正则表达式问题
【发布时间】:2017-10-28 11:39:54
【问题描述】:
^([-+]?)([\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+))?)$/)"

有没有办法让它工作?

【问题讨论】:

  • 贴出完整代码供大家理解。

标签: regex firebase firebase-realtime-database coordinates firebase-security


【解决方案1】:

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

使用

.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 个或 0 个 . 序列和 1+ 个数字(请注意,不支持非捕获组)
  • $ - 字符串锚点的结尾(仅当在模式结尾时,$ 匹配 Firebase 正则表达式中字符串的结尾)。

【讨论】:

  • 非常感谢。正是我想要的。效果很好!
猜你喜欢
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多