validation - 确保 URI 有效

标签 validation url go

我试图确保传递给我的 go 程序的 URL 是有效的。但是,我似乎不知道该怎么做。我想我可以通过 url.Parse 来提供它,但这似乎并没有完成这项工作。

package main

import (
    "fmt"
    "net/url"
)

func main() {
    url, err := url.Parse("http:::/not.valid/a//a??a?b=&&c#hi")
    if err != nil {
        panic(err)
    }
    fmt.Println("It's valid!", url.String())
}

playground

是否有类似 filter_var 的内容?我可以用吗?

最佳答案

您可以检查您的 URL 是否有方案、主机和/或路径。

如果您检查返回的 URL,您可以看到无效部分被插入到不透明数据部分(因此从某种意义上说,它是有效的)。

url.URL{Scheme:"http", Opaque:"::/not.valid/a//a", Host:"", Path:"", RawQuery:"?a?b=&&c", Fragment:"hi"}

如果您解析一个 URL 而没有方案、主机和路径,您可能会认为它是无效的。 (虽然没有路径的主机通常是可以的,因为它暗示了 /,所以你需要检查它)

u, err := url.Parse("http:::/not.valid/a//a??a?b=&&c#hi")
if err != nil {
    log.Fatal(err)
}

if u.Scheme == "" || u.Host == "" || u.Path == "" {
    log.Fatal("invalid URL")
}

关于validation - 确保 URI 有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25747580/

相关文章:

url - URL "file://"和 "http://"有什么区别

java - HTML 基本元素不会将上下文附加到来自 JSP 标记文件的头链接

Android:从 URL 获取 Drawable 不适用于 .jpg,仅适用于 .png

google-app-engine - GAE Go - "This request caused a new process to be started for your application..."

http - HTTP 包服务器在生产中使用安全吗?

c# - 验证多个控件 Asp.Net

java - 如何让h的required属性为:inputText depend on certain set of values from h:selectOneMenu?

spring - Spring 基于注释的验证中的和/或条件

go - 通过golang将消息以avro格式推送到kafka

php - ColdFusion 和 PHP 之间有效/无效的电子邮件格式策略差异