Golang : Use regular expression to validate domain name
There are times when a user enter an invalid domain name as input and it is good to validate the domain name before processing further or store into database. So far, the best way to validate a domain name in Golang is still via regular expression.
There are couple of regular expressions out there that are generally accepted regular expression to validate a domain name. However, for this tutorial we will use :
^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|
([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9])).([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}.[a-zA-Z]{2,3})$
Here we go!
package main
import (
"fmt"
"regexp"
)
func validateDomainName(domain string) bool {
// Golang does not support Perl syntax ((?
// will throw out :
// error parsing regexp: invalid or unsupported Perl syntax: `(?!`
//patternStr := "^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$"
// use regular expression without Perl syntax
RegExp := regexp.MustCompile(`^(([a-zA-Z]{1})|([a-zA-Z]{1}[a-zA-Z]{1})|([a-zA-Z]{1}[0-9]{1})|([0-9]{1}[a-zA-Z]{1})|([a-zA-Z0-9][a-zA-Z0-9-_]{1,61}[a-zA-Z0-9]))\.([a-zA-Z]{2,6}|[a-zA-Z0-9-]{2,30}\.[a-zA-Z
]{2,3})$`)
return RegExp.MatchString(domain)
}
func main() {
domName := "www.golang.org"
if !validateDomainName(domName) {
fmt.Printf("Domain Name %s is invalid\n", domName)
} else {
fmt.Printf("Domain Name %s is VALID\n", domName)
}
domName = "www.socketloop,.com"
if !validateDomainName(domName) {
fmt.Printf("Domain Name %s is invalid\n", domName)
} else {
fmt.Printf("Domain Name %s is VALID\n", domName)
}
domName = "subdomain-socketloop.com"
if !validateDomainName(domName) {
fmt.Printf("Domain Name %s is invalid\n", domName)
} else {
fmt.Printf("Domain Name %s is VALID\n", domName)
}
domName = "-socketloop.com" // invalid starts with hyphen
if !validateDomainName(domName) {
fmt.Printf("Domain Name %s is invalid\n", domName)
} else {
fmt.Printf("Domain Name %s is VALID\n", domName)
}
domName = "socketloop.co_" // invalid ends with underscore
if !validateDomainName(domName) {
fmt.Printf("Domain Name %s is invalid\n", domName)
} else {
fmt.Printf("Domain Name %s is VALID\n", domName)
}
domName = "subdomain.socketloop.com"
if !validateDomainName(domName) {
fmt.Printf("Domain Name %s is invalid\n", domName)
} else {
fmt.Printf("Domain Name %s is VALID\n", domName)
}
}
Output :
Domain Name www.golang.org is VALID
Domain Name www.socketloop,.com is invalid
Domain Name subdomain-socketloop.com is VALID
Domain Name -socketloop.com is invalid
Domain Name socketloop.co_ is invalid
Domain Name subdomain.socketloop.com is VALID
References :
https://www.debuggex.com/r/y4Xe_hDVO11bv1DV
http://stackoverflow.com/questions/10306690/domain-name-validation-with-regex
See also : Golang : Validate email address with regular expression
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+26.5k Golang : Encrypt and decrypt data with AES crypto
+6.6k Golang : Skip or discard items of non-interest when iterating example
+22.6k Golang : Round float to precision example
+5k Linux : How to set root password in Linux Mint
+10k Golang : Test a slice of integers for odd and even numbers
+14.6k Golang : Get URI segments by number and assign as variable example
+9k Golang : How to capture return values from goroutines?
+5.7k Unix/Linux : Get reboot history or check when was the last reboot date
+5.8k Golang : Use NLP to get sentences for each paragraph example
+18.8k Golang : How to make function callback or pass value from function as parameter?
+47.6k Golang : Convert int to byte array([]byte)
+4.9k Golang : Calculate a pip value and distance to target profit example