HomeRegex LibraryFully Qualified Domain Name (FQDN) Regex
100% Client-Side β€’ 0 B Data Leaves Browser
web

Fully Qualified Domain Name (FQDN) Regex

RFC 1035 compliant domain name and hostname validator preventing leading/trailing hyphens in labels.

Regular Expression Pattern:
/^(?!-)[A-Za-z0-9-]{1,63}(?<!-)\.(?:[A-Za-z]{2,}|(?:[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,})$/
Valid Match Example:
api.devtransform-hub.vercel.app
Invalid / Non-Match Example:
-bad-domain.com

Regex Syntax Breakdown & Explanation

  • β€’(?!-)[A-Za-z0-9-]{1,63}(?<!-) : Each domain label up to 63 chars, disallowing leading/trailing dashes
  • β€’\.[A-Za-z]{2,}$ : Top level domain must contain at least 2 alphabetic characters

Implementation in Popular Languages

JavaScript / TypeScript
const regex = /^(?!-)[A-Za-z0-9-]{1,63}(?<!-)\.(?:[A-Za-z]{2,}|(?:[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,})$/;
const isValid = regex.test("api.devtransform-hub.vercel.app");
console.log(isValid); // true
Python (re)
import re

pattern = r"^(?!-)[A-Za-z0-9-]{1,63}(?<!-)\.(?:[A-Za-z]{2,}|(?:[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,})$"
match = re.match(pattern, "api.devtransform-hub.vercel.app")
print(bool(match)) # True
Go (regexp)
package main
import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompile(`^(?!-)[A-Za-z0-9-]{1,63}(?<!-)\.(?:[A-Za-z]{2,}|(?:[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,})$`)
  fmt.Println(re.MatchString("api.devtransform-hub.vercel.app"))
}
Frequently Asked Questions

Frequently Asked Questions

Everything you need to know regarding specifications, syntax, and security best practices.

The regular expression pattern is /^(?!-)[A-Za-z0-9-]{1,63}(?<!-)\.(?:[A-Za-z]{2,}|(?:[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,})$/. RFC 1035 compliant domain name and hostname validator preventing leading/trailing hyphens in labels.