top of page

How to Validate Domain Names in Go(Golang) and C/C++?

Validating a domain name involves checking whether a given string conforms to the rules and conventions of a valid domain name. The rules for validating domain names are primarily based on the Domain Name System (DNS) specifications and typically include restrictions on characters, length, and format.


Here's how to validate domain name in both Go (Golang) and C/C++:


Validate Domain Name using Regular Expression

A regular expression is a pattern that specifies a set of strings. In the context of domain name validation, a regular expression can be crafted to match the structure of valid domain names based on DNS rules.


Regular expressions are typically used for local validation within your own code. They are integrated directly into your codebase. Regular expressions are lightweight and can be efficient for basic validation needs.


However, crafting a comprehensive regular expression that covers all the intricacies of domain names (especially considering Internationalized Domain Names, top-level domains, and complex domain structures) can be complex and error-prone.


Regular expressions may not be able to perform live DNS queries to validate the existence of a domain; they can only check the syntax and structure.


Domain Name Validation in Go (Golang):

In Go, you can use regular expressions to validate domain names. Here's an example using a basic regular expression:

package main

import (
	"fmt"
	"regexp"
)

func isValidDomain(domain string) bool 
{
	// Regular expression to validate domain name
	regex := `^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$`
	match, _ := regexp.MatchString(regex, domain)
	return match
}

func main() {
	domain := "example.com"
	if isValidDomain(domain) {
		fmt.Println("Valid domain name")
	} else {
		fmt.Println("Invalid domain name")
	}
}


Domain Name Validation in C/C++:

In C/C++, you can use libraries like regex or manually implement domain name validation. Here's an example using the regex library:

#include <iostream>
#include <regex>

bool isValidDomain(const std::string& domain) 
{
    // Regular expression to validate domain name
    std::regex regex("^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$");
    return std::regex_match(domain, regex);
}

int main() {
    std::string domain = "example.com";
    if (isValidDomain(domain)) {
        std::cout << "Valid domain name" << std::endl;
    } else {
        std::cout << "Invalid domain name" << std::endl;
    }
    return 0;
}

Important:

Keep in mind that the regular expressions used in these examples are simplified and might not cover all possible domain name scenarios. DNS specifications are more complex, and you might want to consider using established libraries or services to handle domain name validation in a production environment. Additionally, these examples don't cover IDN (Internationalized Domain Names) validation, which involves additional considerations for non-ASCII characters.


Validate Domain Name using Cloudmersive API

The Cloudmersive API is a service provided by Cloudmersive that offers a dedicated endpoint to perform domain name validation. The API takes care of performing live DNS queries to validate the domain's existence.


The API provides a more robust and comprehensive approach to domain name validation. It can handle complex domain structures, Internationalized Domain Names, and more.


Using the API allows you to offload the validation work to a specialized service, reducing the complexity of your code and leveraging external infrastructure.


The API approach is particularly useful if you need accurate and up-to-date validation results, as it connects to DNS services in real-time.


However, using an external API introduces dependencies on the API provider's infrastructure and may have associated costs (if not free). Additionally, it requires an active internet connection to make API requests.


The below code uses an API provided by Cloudmersive to validate whether a domain name is valid by connecting to DNS services. It sends an HTTP POST request to the API with the target domain name and receives a response indicating whether the domain is valid or not.

package main

import (
	"fmt"
	"strings"
	"net/http"
	"io/ioutil"
)

func main() {
	url := "https://api.cloudmersive.com/validate/domain/check"
	method := "POST"
	payload := strings.NewReader(`"example.com"`) 
	// Replace with your target domain

	client := &http.Client{}
	req, err := http.NewRequest(method, url, payload)
	if err != nil {
		fmt.Println(err)
		return
	}

	req.Header.Add("Content-Type", "application/json")
	req.Header.Add("Apikey", "YOUR-API-KEY-HERE") 
	// Replace with your Cloudmersive API key

	res, err := client.Do(req)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer res.Body.Close()

	body, err := ioutil.ReadAll(res.Body)
	if err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println(string(body))
}

Explanation of the code:

  1. Import necessary packages: The code starts by importing the required packages (fmt, strings, net/http, and io/ioutil) to perform HTTP requests and handle responses.

  2. Define the target URL and HTTP method: The URL for the Cloudmersive API is defined as url, and the HTTP method for the request is set to "POST".

  3. Create payload: The payload is created using strings.NewReader, and it contains the target domain name enclosed in double quotes. You should replace "example.com" with the actual domain name you want to validate.

  4. Create an HTTP client and request: An HTTP client is created, and an HTTP request (req) is generated using the specified URL, method, and payload.

  5. Set request headers: The request headers are set using req.Header.Add to include the content type as JSON and your Cloudmersive API key. Replace "YOUR-API-KEY-HERE" with your actual API key.

  6. Perform the HTTP request: The HTTP request is executed using the client's Do method, and the response is stored in res.

  7. Close the response body: The defer statement ensures that the response body is closed after the response has been processed.

  8. Read and print the response: The response body is read using ioutil.ReadAll, and the content is printed to the console.

The purpose of this code is to demonstrate how to use the Cloudmersive API to validate domain names. It sends a request to the API, which then performs a live validation of the provided domain name by connecting with DNS services. The response from the API indicates whether the domain is valid or not. To use this code, you need to replace the placeholder values ("example.com" and "YOUR-API-KEY-HERE") with the actual domain name you want to validate and your Cloudmersive API key, respectively.


Which method to choose?

If you need a quick and simple validation of domain name syntax and structure, a regular expression can be a suitable choice. However, for more comprehensive validation that includes checking the existence of a domain through live DNS queries, using an API like Cloudmersive can provide a more reliable solution. The API can handle complex cases and ensures that your validation remains accurate even as DNS information changes over time.

bottom of page