【问题标题】:Validation of regex input through json schema通过 json 模式验证正则表达式输入
【发布时间】:2020-03-27 12:03:41
【问题描述】:

我必须接受 regular expression 作为来自 html 页面的用户的输入。我正在使用带有 json 模式验证的 Spring Boot 作为后端

Pattern.compile(regex);

java 中的方法作为后端,如果它不是有效的正则表达式,将抛出错误。如果它是有效的正则表达式,则不会引发任何错误。

我们可以用json模式做同样的事情来验证正则表达式输入而不使用java中的动态方法吗?(这样可以减少测试用例的数量)

我们如何仅使用 json 架构来实现这一点?

【问题讨论】:

  • {"regexInput":"[]"} 无效
  • {"regexInput":"[A-Z]" 是一个有效的 json
  • 是的,您使用的是正则表达式。您必须确定验证正则表达式所需的正则表达式。查看pattern JSON Schema 关键字。
  • 我想知道我可以使用什么正则表达式来验证将作为字符串传递的正则表达式
  • 你能在这里写一些例子,以便清楚你想要做什么吗?

标签: json regex jsonschema


【解决方案1】:

通过 json 模式验证正则表达式输入

接受/验证包含正则表达式输入字段的请求正文。通常我们必须使用 Pattern.compile(myRegex) 其中 myRegex 是正则表达式的输入文件。如果它抛出错误(例如,PatternSyntaxException In java),它是无效的,否则它是有效的正则表达式。


这也可以在 json 模式中完成

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "description": "This is for validating input json request body containing myRegex field which accepts regex",
  "required": [
    "myRegex"
  ],
  "properties": {
    "myRegex": {
      "type": "string",
      "format": "regex"
    }
  }
}

此架构在 POST/PUT 的以下请求正文中验证这一点


{

    "myRegex":"*8"
}

上述请求正文无效,因为“*8”不是有效的正则表达式


{

    "myRegex":"^[_A-Za-z0-9][-_A-Za-z0-9.]*$"
}

根据架构有效


参考: https://json-schema.org/understanding-json-schema/reference/string.html#format

草案 7 中新引入了“regex”属性

【讨论】:

    猜你喜欢
    • 2019-12-10
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2012-01-08
    • 2019-01-07
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多