【问题标题】:Validating URL domain in Rails在 Rails 中验证 URL 域
【发布时间】:2012-11-23 16:30:59
【问题描述】:

我想验证一个网址,所以我搜索并找到了this

Brian Ray 在他的帖子中说

"@Tate 的回答对于完整的 URL 来说是很好的,但是如果你想验证一个域列,你不想允许他的正则表达式允许的额外 URL 位(例如,你肯定不想允许一个 URL带有文件的路径)。

所以我删除了正则表达式的协议、端口、文件路径和查询字符串部分,结果如下:"

我完全不明白他在说什么。 URL如何成为文件的路径?什么是“域列”?

【问题讨论】:

  • 查看他消息底部的示例链接。
  • 使用正则表达式验证除简单 URL 之外的任何内容都会适得其反。最好编写一个使用 URI.parse 的自定义验证。
  • @DouglasFShearer 你的意思是,如果URI.parse 没有引发URI::InvalidURIError,那么它是一个有效的URI?
  • 是的,完全正确。另一种验证 URL 的实用方法是向它发出请求,并检查非 50X 响应。
  • URI.parse('xxx') 不要提出,我不明白如何使用它(假设 'xxx' 不被视为 ok URL)。

标签: ruby-on-rails regex validation url


【解决方案1】:

一个 URL 由几个部分组成。如果你有一个非常精致的 URL,比如:

http://www.example.com:1234/path/to/file.html?key1=value1&key2=value2

部分是:

  • 协议:http://
  • 主机名:www
  • 域名:example.com
  • 端口:1234
  • 文件路径:path/to/file.html
  • 查询字符串:key1=value1&key2=value2

唯一不能省略的部分是协议(但许多程序允许默认为 http://)和主机名。每个部分对其中的合法字符都有自己的要求。更糟糕的是,并非所有 Web 服务器都同意这些要求。因此,您唯一可以在不进行实际连接并查看它是否失败的情况下检查的是联系 Web 服务器所需的部分。这只是协议、主机和域名以及端口。这些都是不区分大小写的(其余的可能不区分)。我不确定主机或域名中的有效字符是什么,但这也是名称服务器可能不符合规范的地方。

简而言之,检查 URL 是否有效的唯一方法是尝试与其建立连接。如果您的程序使用一些魔法来拒绝 URL(或电子邮件地址),那么有些人会因此而讨厌您和/或他们的互联网提供商(因为即使您的检查遵循规范,一些主机或域名也不会这样做)。

关于 URL 如何引用本地文件的问题,有一个特殊的协议:file://。由于路径也必须以 / 开头,因此会产生类似 file:///home/user/file.html 的 URL,因此开头是三个斜杠。

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多