我试图确保传递给我的 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())
}
是否有类似 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/