Есть ли какая-либо функция в стандартном пакете в GO, которая позволяет проверять URL?
Я ничего не нашел в своем первоначальном поиске, и я бы предпочел не прибегать к проверке регулярных выражений.
Есть ли какая-либо функция в стандартном пакете в GO, которая позволяет проверять URL?
Я ничего не нашел в своем первоначальном поиске, и я бы предпочел не прибегать к проверке регулярных выражений.
Yep, url.ParseRequestURI
возвращает ошибку, если URL-адрес недействителен, а не абсолютный URL-адрес и т.д. и т.д. url.Parse
возвращает значение почти на все...
import "net/url"
...
u, err := url.ParseRequestURI("http://google.com/")
if err != nil {
panic(err)
}
Вышеприведенный пример не сработает, но они будут:
u, err := url.ParseRequestURI("http//google.com")
u, err := url.ParseRequestURI("google.com")
u, err := url.ParseRequestURI("/foo/bar")
Принятый ответ позволяет относительные URL и http://
. Если вы хотите более строгую проверку, это отклонит те:
import "net/url"
func IsUrl(str string) bool {
u, err := url.Parse(str)
if err == nil && u.Scheme != "" && u.Host != "" {
return true
}
return false
}
Пример: https://play.golang.org/p/Q83WuPGlnaY
Что пришло из этого ответа: fooobar.com/questions/4623582/...
Это помогло мне понять, как работает стандартная библиотека url.Parse, надеюсь, это поможет и некоторым из вас. Обратите внимание, что все эти значения никогда не выдают ошибку.
package main
import (
"fmt"
"net/url"
)
func main() {
urls := []string{
"https",
"https://",
"",
"http://www",
"http://www.dumpsters.com",
"https://www.dumpsters.com:443",
"/testing-path",
"testing-path",
"alskjff#?asf//dfas",
}
for _, u := range urls {
val, err := url.Parse(u)
scheme := val.Scheme
host := val.Host
hostname := val.Hostname()
path := val.Path
fmt.Println("val : "+u+" : ", val)
fmt.Println("error : "+u+" : ", err)
fmt.Println("scheme : "+u+" : ", scheme)
fmt.Println("host : "+u+" : ", host)
fmt.Println("hostname : "+u+" : ", hostname)
fmt.Println("path : "+u+" : ", path)
fmt.Println()
}
}
Результаты, достижения
val : https : https
error : https : <nil>
scheme : https :
host : https :
hostname : https :
path : https : https
val : https:// : https:
error : https:// : <nil>
scheme : https:// : https
host : https:// :
hostname : https:// :
path : https:// :
val : :
error : : <nil>
scheme : :
host : :
hostname : :
path : :
val : http://www : http://www
error : http://www : <nil>
scheme : http://www : http
host : http://www : www
hostname : http://www : www
path : http://www :
val : http://www.dumpsters.com : http://www.dumpsters.com
error : http://www.dumpsters.com : <nil>
scheme : http://www.dumpsters.com : http
host : http://www.dumpsters.com : www.dumpsters.com
hostname : http://www.dumpsters.com : www.dumpsters.com
path : http://www.dumpsters.com :
val : https://www.dumpsters.com:443 : https://www.dumpsters.com:443
error : https://www.dumpsters.com:443 : <nil>
scheme : https://www.dumpsters.com:443 : https
host : https://www.dumpsters.com:443 : www.dumpsters.com:443
hostname : https://www.dumpsters.com:443 : www.dumpsters.com
path : https://www.dumpsters.com:443 :
val : /testing-path : /testing-path
error : /testing-path : <nil>
scheme : /testing-path :
host : /testing-path :
hostname : /testing-path :
path : /testing-path : /testing-path
val : testing-path : testing-path
error : testing-path : <nil>
scheme : testing-path :
host : testing-path :
hostname : testing-path :
path : testing-path : testing-path
val : alskjff#?asf//dfas : alskjff#?asf//dfas
error : alskjff#?asf//dfas : <nil>
scheme : alskjff#?asf//dfas :
host : alskjff#?asf//dfas :
hostname : alskjff#?asf//dfas :
path : alskjff#?asf//dfas : alskjff