Go 标准库的net/url包提供的两个函可以直接检查URL合法性,不需要手动去正则匹配校验。 下面可以直接使用ParseRequestURI()函数解析URL,当然这个只会验证url格式,至于域名是否存在或注册,不会检查的,举个例子:
package main import ( "fmt" "net/url" ) func main() { url, err := url.ParseRequestURI("https://www.zhoubotong.site") // 注意这里必须带有http/https协议, //否则会被认定非合法url,但是使用//www.zhoubotong.sit,被返回空,所以error哪里会被绕过,该示例代码不够严谨 if err != nil { fmt.Println(err) return } fmt.Println(url.Hostname()) }
输出:[www.zhoubotong.site](http://www.zhoubotong.site),下面整个错误的url:
func main() { url, err := url.ParseRequestURI("www.zhoubotong.site") // www.zhoubotong.site" 或者zhoubotong.site" if err != nil { fmt.Println(err) return } fmt.Println(url.Hostname()) }
输出:parse "www.zhoubotong.site": invalid URI for request,既然上面的代码不够严谨,如何改善呢?完整代码如下:
package main import ( "fmt" "net/url" ) func main() { var u string = "https://www.zhoubotong.site" _, err := url.ParseRequestURI(u) if err != nil { fmt.Println(err) return } url, err := url.Parse(u) if err != nil || url.Scheme == "" || url.Host == "" { fmt.Println(err) return } fmt.Println(url.Hostname(), "success") }
发表评论 取消回复