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); // truePython (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)) # TrueGo (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.