对于我构建的应用,我想使用Firebase push生成的ID作为电子邮件地址本地部分。由于dash
( - )不允许作为第一个字符,我想用另一个字符替换它。
但这必须是可逆的。因此,我想知道Firebase推送ID包含哪些字符? 到目前为止,我已经看到了:
示例:-KD3rcGMuucRDjKOTK3O
答案 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-_;]*`);