golang 校验是否为 ipv4/ipv6地址/域名

校验请求字段是否是 IPv4、IPv6地址、域名。

net.ParseIP: 校验是否为 IP地址

func net.ParseIP(s string) net.IP

ParseIP parses s as an IP address, returning the result. The string s can be in IPv4 dotted decimal ("192.0.2.1"), IPv6 ("2001:db8::68"), or IPv4-mapped IPv6 ("::ffff:192.0.2.1") form. If s is not a valid textual representation of an IP address, ParseIP returns nil.

缺点:只能校验是否为 IP 地址,不能区分IP 版本。

import (	
    "net"
)

if net.ParseIP(userIP) == nil {
    // 如果不是 IP 的分支处理
}
1
2
3
4
5
6
7

govalidator: 校验是否为 IPv4 或 IPv6 地址

func IsIPv4(str string) bool

IsIPv4 checks if the string is an IP version 4.

func IsIPv6(str string) bool

IsIPv6 checks if the string is an IP version 6.

import (	
    "github.com/asaskevich/govalidator"
)

if govalidator.IsIPv4(userIP) == true {
    // 如果是IPv4 的分支处理
}

if govalidator.IsIPv6(userIP) == true {
    // 如果是IPv6 的分支处理
}
1
2
3
4
5
6
7
8
9
10
11

govalidator 校验的类型特别多,具体可以查看其 GitHub 链接。

校验是否为域名

import (	
    isd "github.com/jbenet/go-is-domain"
)

if isd.IsDomain(userIP) == true {
    // 如果是域名的分支处理
}

1
2
3
4
5
6
7
8

官方文档open in new window

func IsDomain(s string) bool

IsDomain returns whether given string is a domain. It first checks the TLD, and then uses a regular expression.