Firebase推送ID:里面可以包含哪些字符?

时间:2016-03-18 13:58:11

标签: firebase

对于我构建的应用,我想使用Firebase push生成的ID作为电子邮件地址本地部分。由于dash( - )不允许作为第一个字符,我想用另一个字符替换它。

但这必须是可逆的。因此,我想知道Firebase推送ID包含哪些字符? 到目前为止,我已经看到了:

  • alpha(a-z和A-Z和0-9)
  • 下划线(_)
  • 破折号( - )

示例:-KD3rcGMuucRDjKOTK3O

  • ID中是否包含其他任何字符?
  • firebase ID始终以破折号开头吗?

2 个答案:

答案 0 :(得分:11)

与使用Firebase的推送ID然后修改它们相比,生成唯一电子邮件地址的方法可能有很多 。也就是说,如果您想了解有关Firebase如何生成推送ID的更多信息,请阅读此博文:The 2^120 Ways to Ensure Unique Identifiers。它还解释了为什么你不应该依赖push id来获得不可靠/安全。

从这篇文章中要认识到的重要一点是,push id的前8个字符包含一个编码的时间戳,这也是它们总是以相同的字符开头的原因,如果你生成它们彼此接近。

该帖子还包含指向JavaScript code to generate a push id的要点的链接。

Firebase选择的字符集是:

-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz;

正如您所看到的,-只是此词典中的第一个字符,这是推送ID(当前)全部以-开头的唯一原因。在将来的某个时刻,他们将以0开始,然后是1,等等。如果您在gist中获取代码,则可以计算每次滚动发生的时间。

最后:我曾经写过如何从推送ID中获取时间戳的答案。建议不要这样做,但这可能是一个有趣的实验:Can you get the timestamp from a Firebase array key?

答案 1 :(得分:0)

严格来说不是对所问问题的回应,而是相关的:根据上面@Frank 的回答,似乎总是匹配 Firebase 推送 ID 的正则表达式看起来像这样:

const regex = /[a-zA-Z0-9-_;]*/gm;

此正则表达式假定字符串中的 ID 将由 / 分隔。添加了 -; 以覆盖剩余的字符集。如果您只是在第一场比赛之后,请移除 gm 模式标志。

我遇到了一个问题,需要从 URL 中提取推送 ID。推送 ID 出现在另一个已知 ID 之后。这种情况的正则表达式可能如下所示:

let regex = new RegExp(`(?<=${known_ID}\/)[a-zA-Z0-9-_;]*`);