Golang 判断字符串是否为域名 - 正则表达式和 URL 解析
使用 Golang 代码判断一个字符串是否是域名,可以采用两种方法:正则表达式匹配和 URL 解析。
使用正则表达式匹配域名
可以使用正则表达式来判断一个字符串是否是域名。以下是一个示例代码:
package main
import (
"fmt"
"regexp"
)
func main() {
domain := 'www.example.com'
if isDomain(domain) {
fmt.Printf('%s is a domain\n', domain)
} else {
fmt.Printf('%s is not a domain\n', domain)
}
notDomain := 'example'
if isDomain(notDomain) {
fmt.Printf('%s is a domain\n', notDomain)
} else {
fmt.Printf('%s is not a domain\n', notDomain)
}
}
func isDomain(s string) bool {
// 匹配域名的正则表达式
pattern := `^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$`
r := regexp.MustCompile(pattern)
return r.MatchString(s)
}
运行结果:
www.example.com is a domain
example is not a domain
在上面的示例代码中,使用了正则表达式 ^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$ 来匹配域名。该正则表达式的含义是:
^表示字符串的开头([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+表示一个或多个由字母、数字、连字符(-)组成的子域名,每个子域名之间用点号(.)分隔。其中,每个子域名的长度不能超过 63 个字符,且不能以连字符(-)开头或结尾。[a-zA-Z]{2,}表示顶级域名,由两个或多个字母组成。
使用 URL 解析判断域名
如果要判断一个字符串是否是合法的 URL,可以使用 Go 标准库中的 net/url 包。例如:
package main
import (
"fmt"
"net/url"
)
func main() {
urlString := 'https://www.example.com/path?query=string'
u, err := url.Parse(urlString)
if err != nil {
fmt.Printf('%s is not a valid URL\n', urlString)
return
}
if u.Scheme == '' || u.Host == '' {
fmt.Printf('%s is not a valid URL\n', urlString)
return
}
fmt.Printf('%s is a valid URL\n', urlString)
}
运行结果:
https://www.example.com/path?query=string is a valid URL
总结
本文介绍了使用 Golang 代码判断字符串是否为域名的两种方法:正则表达式匹配和 URL 解析。两种方法各有优缺点,具体选择哪种方法取决于实际需求。
原文地址: http://www.cveoy.top/t/topic/kg6H 著作权归作者所有。请勿转载和采集!