package regx import ( "net" "net/url" "regexp" "strconv" "strings" ) func (rr *Regx) IsIpRegx(address string) bool { ipReg := `^((0|[1-9]\d?|1\d\d|2[0-4]\d|25[0-5])\.){3}(0|[1-9]\d?|1\d\d|2[0-4]\d|25[0-5])$` r, _ := regexp.Compile(ipReg) match := r.MatchString(address) if match { return true } return false } // IsIp check if the string is a ip address. func (rr *Regx) IsIp(ipstr string) bool { ip := net.ParseIP(ipstr) return ip != nil } // IsIpV4 check if the string is a ipv4 address. func (rr *Regx) IsIpV4(ipstr string) bool { ip := net.ParseIP(ipstr) if ip == nil { return false } return strings.Contains(ipstr, ".") } // IsIpV6 check if the string is a ipv6 address. func (rr *Regx) IsIpV6(ipstr string) bool { ip := net.ParseIP(ipstr) if ip == nil { return false } return strings.Contains(ipstr, ":") } // IsPort check if the string is a valid net port. func (rr *Regx) IsPort(str string) bool { if i, err := strconv.ParseInt(str, 10, 64); err == nil && i > 0 && i < 65536 { return true } return false } // IsUrl check if the string is url. func (rr *Regx) IsUrl(str string) bool { var isUrlRegexMatcher *regexp.Regexp = regexp.MustCompile(`^((ftp|http|https?):\/\/)?(\S+(:\S*)?@)?((([1-9]\d?|1\d\d|2[01]\d|22[0-3])(\.(1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.([0-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(([a-zA-Z0-9]+([-\.][a-zA-Z0-9]+)*)|((www\.)?))?(([a-z\x{00a1}-\x{ffff}0-9]+-?-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.([a-z\x{00a1}-\x{ffff}]{2,}))?))(:(\d{1,5}))?((\/|\?|#)[^\s]*)?$`) if str == "" || len(str) >= 2083 || len(str) <= 3 || strings.HasPrefix(str, ".") { return false } u, err := url.Parse(str) if err != nil { return false } if strings.HasPrefix(u.Host, ".") { return false } if u.Host == "" && (u.Path != "" && !strings.Contains(u.Path, ".")) { return false } return isUrlRegexMatcher.MatchString(str) } // IsDns check if the string is dns. func (rr *Regx) IsDns(dns string) bool { var isDnsRegexMatcher *regexp.Regexp = regexp.MustCompile(`^[a-zA-Z]([a-zA-Z0-9\-]+[\.]?)*[a-zA-Z0-9]$`) return isDnsRegexMatcher.MatchString(dns) }