【问题标题】:RegEx for URI Templates (RFC 6570) wanted需要用于 URI 模板 (RFC 6570) 的 RegEx
【发布时间】:2015-04-07 14:53:35
【问题描述】:

我需要验证一个字符串以确保它是一个有效的URI Template according to RFC 6570。这应该使用正则表达式很容易。但是,我没有找到——真的没有用于 URI 模板的 RegEx(还没有)吗?

上下文:我想在使用 node.js 处理的 JSON Schema 中使用它。

【问题讨论】:

  • 我认为验证 URL 的正则表达式模式对你有用。
  • 不,它没有,因为 URL 不允许 URI 模板占位符(如花括号)
  • 好吧,你不能调整 URL 模式吗?
  • 当然,我只是想知道是否已经有一个久经考验的正则表达式......

标签: javascript regex jsonschema uritemplate


【解决方案1】:

在这里聚会有点晚了,但由于唯一的答案没有解决 URI 模板的正则表达式问题,所以我决定尝试一下,因为我也找不到。这完全基于Section 2 of RFC 6570 中的 ABNF 规则,并且我包含了一些 ASCII 艺术来绘制不同的组件。

^([^\x00-\x20\x7f"'%<>\\^`{|}]|%[0-9A-Fa-f]{2}|{[+#./;?&=,!@|]?((\w|%[0-9A-Fa-f]{2})(\.?(\w|%[0-9A-Fa-f]{2}))*(:[1-9]\d{0,3}|\*)?)(,((\w|%[0-9A-Fa-f]{2})(\.?(\w|%[0-9A-Fa-f]{2}))*(:[1-9]\d{0,3}|\*)?))*})*$
  \                            \_____________/ \\____________/ \\__________________/    \__________________/ /\________________/ /  \_________________________________________________________________/ //
   \                            pct-encoded /   \   operator    \\     varchar                varchar       /  modifier-level4  /                               varspec                                //
    \______________________________________/     \               \\________________________________________/                   /                                                                      //
                    literals                      \               \                varname                                    /                                                                      //
                                                   \               \_________________________________________________________/                                                                      //
                                                    \               \                        varspec                                                                                               //
                                                     \               \____________________________________________________________________________________________________________________________//
                                                      \                                                                   variable-list                                                           /
                                                       \_________________________________________________________________________________________________________________________________________/
                                                                                                                   expression

您可以在regex101.com 上查看。这应该在 JSON Schema 中工作,因为我使用的是 ECMA 语法。可能还可以进行一些简化,但正如我所说,这与 ABNF 一致,因此如果您熟悉规范,它应该相对易于遵循。

【讨论】:

    【解决方案2】:

    我想你可能会通过这个用 Java 实现 RFC-6570 的 library 找到你想要的东西。

    <dependency>
        <groupId>com.github.fge</groupId>
        <artifactId>uri-template</artifactId>
        <version>yourVersionHere</version>
    </dependency>
    

    如果在解析过程中出现错误,URITemplate 构造函数将返回一个URITemplateParseException

    final URITemplate template = new URITemplate("http://foo.bar/myPage{?map*}");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 2011-10-25
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多