【问题标题】:How to specify matching a literal asterisk in a json schema pattern如何在 json 模式模式中指定匹配文字星号
【发布时间】:2021-07-09 00:23:30
【问题描述】:

我想在 json 模式中指定一个模式,该模式需要在只能包含 2 个字符的字符串开头使用星号,例如:

*A

我尝试了以下模式,但它不起作用:

"code": {
  "type": "string",
  "pattern": "^[*A-Z]{2}$"
}

上述模式允许:*A 和 AA 这不是我想要的。

我正在使用 ajv json 模式验证器。

【问题讨论】:

    标签: json regex json-schema-validator ajv


    【解决方案1】:

    正则表达式[*A-Z]{2} 匹配*A-Z。星号有点奇怪,因此您需要将其设为自己的组。试试这个:^[*][A-Z]{2}$

    编辑:我假设您的意思是它需要一个星号后跟 2 个字符,例如 *BC*AE。如果您的意思是它必须以星号开头,后跟一个字符,只需删除 {2}

    【讨论】:

    • 不需要将* 放在括号中。反转义足以转义任何特殊字符(然后是 JSON 编码的另一个反斜杠)。
    • 我尝试了所有建议的 cmets,最终使用了这个“模式”:“^\*[A-Z]$”。这种模式也适用: "pattern": "^[*][A-Z]$" 。由于某种原因,当我保存我的编辑时,它没有显示第二个反斜杠。非常感谢大家!
    【解决方案2】:

    您的模式^[*A-Z]{2}$ 允许使用 2 次星号或 A-Z 范围内的字符

    如果你想允许 2 个字符,并且第一个必须是星号:

    ^\*[A-Z]$
    

    Regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多