使用占位符进行 Java URL 验证

标签 java regex validation url

我构建了一个 API,您可以在其中注册回调 URL。

URL 使用 Apache UrlValidator 进行验证类。

我现在必须添加一项功能,允许在配置的 URL 中添加占位符。

https:/foo.com/${placeholder1}/bar/${placeholder2}

这些占位符将使用 Apache StrSubstitutor 动态替换或类似的东西。

现在我的问题是,如何使用占位符验证 URL?

我想到了一个解决方案:

  • 我用示例值替换了预期的占位符
  • 然后我使用 Apache UrlValidator 验证 URL

此解决方案的问题是 Apache UrlValidator仅返回一个 boolean 值,因此错误消息将非常不明确。

除了创建自己的正则表达式之外,还有其他解决方案吗?

更新:以下评论中的讨论

允许的占位符数量是有限的。

将替换占位符的字符串的格式也是已知的。

第一个目标是能够检查最终包含占位符的给定 URL 在配置时是否有效。

第二个目标是,如果 URL 无效,则返回一条可理解的错误消息。

有多种错误情况:

  • 网址中使用的占位符不在允许的占位符列表中
  • 无论占位符如何,该网址均无效

最佳答案

对于最小的 URL 验证,您可以使用 java.net.URL 构造函数(它将与您的 https:/foo.com/${placeholder1}/bar/$ {placeholder2} 示例)。

根据docs ,它抛出:

MalformedURLException - if no protocol is specified, or an unknown protocol is found, or spec is null.

然后,您可以利用 URL 方法作为奖励,获取其中的部分内容,例如路径、协议(protocol)等。

我绝对建议不要使用正则表达式进行 URL 验证重新发明轮子。

请注意,java.net.URI 具有更严格的验证,并且按原样使用占位符会使您的示例失败。

编辑

正如所讨论的,由于您还需要验证占位符,因此您可能希望首先尝试填充它们,如果出现问题则快速失败,然后继续根据 java.net.URI 验证填充的 URL,进行严格验证。

一般警告

您可能还想让您的生活更轻松,并利用现有框架,该框架允许您首先使用带注释的路径变量(例如 Spring 等),但这相当广泛讨论。

关于使用占位符进行 Java URL 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48546184/

相关文章:

java - 如何防止 mapstruct 映射大量字段而不必手动排除它们?

regex - 使用 ko.observable 进行多电子邮件验证

validation - 实现中的静态分析与符号执行

java - Dagger 依赖冲突 android studio

java - 接收 Smack 的第一条消息时出现问题

java - 安装多个java文件以同时使用

regex - 非结构化数据集(文本或 CSV 文件)中的精确模式匹配

regex - 常规语言(是或否)

php - 检查数组键是否存在,不区分大小写

ruby-on-rails - 更新操作期间如何在Rails中显示验证错误?