【问题标题】:How can I validate number of digits in a number using JSON Schema (ajv)?如何使用 JSON Schema (ajv) 验证数字中的位数?
【发布时间】:2019-04-26 05:54:42
【问题描述】:

在双因素身份验证 (2FA) 中,表单要求仅由 6 位数字组成的代码 例如:064964

我用的是大名鼎鼎的Ajv JSON Schema Validator

我无法为此代码构建验证方案:

export const code = {
  'type': 'object',
  'properties': {
     code: {
      'type': ['number'],
       'minimum': 6,
      'minLength': 6
    },
  },
  'required': ['code'],
};

你能帮帮我吗?

【问题讨论】:

    标签: jsonschema ajv


    【解决方案1】:

    minLength 仅适用于字符串,不适用于数字。 给定的代码可以以 0 开头,你不能这样做minimum: 100000

    如果您想使用纯 JSON Schema 来执行此操作,您需要将代码表示为字符串而不是数字。

    JSON Schema 没有“数字中的位数”的验证关键字。

    话虽如此,ajv 确实允许您添加自己的关键字,并为它们编写验证代码,但这意味着您的架构不能被其他人使用。

    【讨论】:

    • 实际上,如果您希望表示 012345,您可能会遇到问题。实际上,javascript 可能会将 0 开头的数字视为八进制:stackoverflow.com/questions/37003770/…
    • 不需要自定义关键字。 pattern 可用于将字符串中的所有字符限制为数字。您可以使用正则表达式强制位数或使用minLength/maxLength
    • 事实上,'pattern' 关键字中正确形状的正则表达式可以处理所有:只是数字,最少 6 个。
    • 其实,没有。 pattern 仅适用于字符串,不适用于其他类型。一些库可能会自动转换为字符串,但这不是正确的行为。有一个测试,但它不检查所有其他类型。也许应该。 github.com/json-schema-org/JSON-Schema-Test-Suite/blob/master/…
    • @Relequestual - 我的评论遵循假设在使用 JSON 模式进行验证之前将数字转换为字符串。抱歉,我之前没有正确地强调它。我同意,假设它将自动转换是粗心的。需要明确地做到这一点。完成后,将pattern 与相当简单的正则表达式一起使用,仅此而已。有时,根据一个使用的正则表达式解析器,它会免费提供,但最好是安全而不是抱歉。
    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 2018-11-25
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    相关资源
    最近更新 更多