【问题标题】:A regex / json-schema pattern for an IPFS CID?IPFS CID 的正则表达式 / json 模式模式?
【发布时间】:2021-04-20 10:02:55
【问题描述】:

我想在 json 架构中包含一个 ipfs 内容标识符 (CID) 的模式。为此,我需要创建一个正则表达式来匹配它们。

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "http://json-schema.org/draft-07/schema#",
    "title": "Example schema with an ipfs CID",
    { "type": "object",
      "properties": {
          "ipfs":  { "type": "string","pattern": "<CID regex here>"}
      }
}

为 IPFS CID 执行正则表达式的好方法是什么?

【问题讨论】:

    标签: regex jsonschema ipfs


    【解决方案1】:

    对于CIDv0

    字符串表示的multibase始终是base58btc

    例如QmcRD4wkPPi6dig81r5sLj9Zm1gDCL4zgpEj9CfuRrGbzF

    Qm[1-9A-Za-z]{44}[^OIl]
    

    似乎有效

    对于CIDv1,编码的变化取决于first character(以下是默认状态的编码):

    > *encoding*             *code*                               
    > identity               0x00
    > base16                 f
    > base16upper            F
    > hexadecimal base32     b
    > base32upper            B
    > base58btc              z
    > base64                 m   
    > base64url              u
    > base64urlpad           U
    

    例如bafybeigrf2dwtpjkiovnigysyto3d55opf6qkdikx6d65onrqnfzwgdkfa

    b之后有十六进制base32编码

    这意味着正则表达式必须有一个基于第一个字符的条件元素。

    另外,我认为我认为 CIDv1 的长度会根据所选的哈希算法而变化是正确的。此答案仅限于具有 256 位输出的哈希算法。

    这种方法将正则表达式与 OR | 运算符分开:

    Qm[1-9A-HJ-NP-Za-km-z]{44,}|b[A-Za-z2-7]{58,}|B[A-Z2-7]{58,}|z[1-9A-HJ-NP-Za-km-z]{48,}|F[0-9A-F]{50,}
    

    不过,也许有更好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2022-11-27
      • 1970-01-01
      • 2017-03-25
      • 2012-02-12
      相关资源
      最近更新 更多