【问题标题】:Regex for validating account names for NEAR protocol用于验证 NEAR 协议的帐户名称的正则表达式
【发布时间】:2022-06-11 03:29:20
【问题描述】:

我希望对 NEAR 协议帐户地址进行准确的表单字段验证。

我在https://docs.near.org/docs/concepts/account#account-id-rules 看到最小长度为 2,最大长度为 64,并且字符串必须是公钥的 64 个字符的十六进制表示形式(在隐式帐户的情况下)或必须包含“帐户 ID 部分”以 . 分隔并以 .near 结尾,其中“帐户 ID 部分”由以 _- 分隔的小写字母数字符号组成。

这里有一些例子。

这里最后4个案例应该被标记为无效(可能还有更多我不知道的案例):

  • example.near
  • sub.ex.near
  • something.near
  • 98793cd91a3f870fb126f66285808c7e094afcfc4eda8a970f6648cdf0dbd6de
  • wrong.near.suffix(无效)
  • shouldnotendwithperiod.near.(无效)
  • space should fail.near(无效)
  • touchingDotsShouldfail..near(无效)

我想知道我是否应该在验证中使用经过良好测试的正则表达式。

谢谢。

附:最初我的问题指向我从 https://regex101.com/r/jZHtDA/1 开始的内容,但鉴于必须已经有官方验证规则可以复制,因此从头开始感觉不明智。

我查看了我希望使用某种验证的代码,例如这些链接,但我还没有找到它:

【问题讨论】:

  • 不清楚哪些匹配应该是无效的以及为什么
  • 平台规范中有一个正则表达式可能有助于^(([a-z\d]+[\-_])*[a-z\d]+\.)*([a-z\d]+[\-_])*[a-z\d]+$ 在这里找到nomicon.io/DataStructures/Account

标签: regex nearprotocol near


【解决方案1】:

应该这样做:/^(\w|(?<!\.)\.)+(?<!\.)\.(testnet|near)$/gm

细分

^                 # start of line
(
  \w              # match alphanumeric characters
  |               # OR
  (?<!\.)\.       # dots can't be preceded by dots
)+
(?<!\.)           # "." should not precede:
\.                # "."
(testnet|near)    # match "testnet" or "near"
$                 # end of line

试试正则表达式:https://regex101.com/r/vctRlo/1

【讨论】:

    【解决方案2】:

    如果你只想匹配单词字符,用点分隔:

    ^\w+(?:\.\w+)*\.(?:testnet|near)$
    

    说明

    • ^ 字符串开始
    • \w+ 匹配 1+ 个单词字符
    • (?:\.\w+)* 可选择重复 . 和 1+ 个单词字符
    • \.匹配.
    • (?:testnet|near) 匹配 testnetnear
    • $字符串结束

    Regex demo

    更广泛的变体匹配不包括点的空白字符:

    ^[^\s.]+(?:\.[^\s.]+)*\.(?:testnet|near)$
    

    Regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2022-01-13
      • 1970-01-01
      • 2021-10-29
      • 2021-09-06
      • 2012-08-14
      相关资源
      最近更新 更多