【问题标题】:Regex To Validate An Absolute URL OR A Relative URL正则表达式验证绝对 URL 或相对 URL
【发布时间】:2011-03-24 15:17:34
【问题描述】:

我需要一个正则表达式来验证绝对 URL 或相对 URL。

  • http://www.example.com 应该通过
  • /example/some.pdf 应该通过
  • /example.com/some.pdf 应该会失败
  • 示例应该失败

【问题讨论】:

  • 所有示例都是有效的 URL。 – 好吧,事实上,除了最后一个之外,所有 URL 都是有效的 absolute URL(您似乎混淆了相对、绝对和没有协议架构),只有最后一个是(有效!)相对 URL。总之,不清楚你在追求什么。
  • #4 中的缺陷:我在“somesite.com/blah.html”页面上。如果我在 ... 之类的页面上有一个链接,它将带我到“somesite.com/example”,它可以是最终指向“somesite.com/example/index.html”的有效网址或您可以使用 mod_rewrite 将其重定向到的任何内容......并且在那张纸条上,您可以使用 mod_rewrite 将任何内容重定向到任何内容,因此 IOW 没有严格的“无效”网址这样的东西
  • 我想更正@KonradRudolph 在他们的建议中,除了最后一个 url 之外都是绝对 url,因为以斜杠开头的两个被称为 root-relative url。
  • @vhs the official specification(也不是 the original RFC)都没有提到“根相对 URL”(实际上示例 2 和 3 被称为“路径绝对 URL 字符串”)。也就是说,您是对的:令人困惑的是,根据规范,path-absolute-URL 字符串是 relative URL。令人惊讶的是,MDN makes the same mistake as I。很遗憾,我之前的评论已经 10 多年没有受到质疑。

标签: regex url


【解决方案1】:
(http://|/)[^ :]+

另外值得注意的是,/example.com/some 是一个有效的 url,因为文件夹中可以有句点,并且并非所有文件都有扩展名。

根据系统的不同,可以很容易地将更多类型的字符添加到否定括号中。

最简单的方法是从服务器实际请求文件元数据以检查它实际存在的天气,但根本不会使用正则表达式。

【讨论】:

  • 其他协议呢? HTTPS? FTP?某人?这不太可靠。
【解决方案2】:

正如 Konrad Rudolph 正确指出的那样:OP 中的所有示例都是有效的 URL!您是否知道空字符串也是有效的 URL?这是真的!如果您真的想要验证一个 URL,或者我应该说 URI,第一个要阅读的文档是:RFC-3986 - Uniform Resource Identifier (URI): Generic Syntax。我一直在研究这个问题,并写了(正在写)一篇关于这个主题的文章:

Regular Expression URI Validation

请注意,这只处理 通用 URI。您可能需要了解您感兴趣的方案的进一步要求(即HTTP),例如要求主机名是有效的 DNS 主机。

【讨论】:

    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多