★ Web · regex
Regex for Domain Name
Checks a bare domain name: labels of letters, digits and inner hyphens, up to 63 characters each, separated by dots and ending in a letters-only TLD. Punycode labels (xn--) for internationalised domains pass.
- Runs in your browser
- No signup
Try the domain name pattern
Read it in plain English (best-effort)
- ^start of a line
- (?:start a group (not captured)
- [A-Za-z0-9]one character from: A–Z, a–z, 0–9
- (?:start a group (not captured)
- [A-Za-z0-9-]one character from: A–Z, a–z, 0–9, '-'
- {0,61}between 0 and 61 of the previous
- [A-Za-z0-9]one character from: A–Z, a–z, 0–9
- )end of group
- ?the previous is optional
- .the character '.'
- )end of group
- +one or more of the previous
- [A-Za-z]one character from: A–Z, a–z
- {2,63}between 2 and 63 of the previous
- $end of a line
One sample per line works well with the m flag on anchored patterns.
The pattern, piece by piece
/^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,63}$/| Part | What it does |
|---|---|
[A-Za-z0-9] | a label starts with a letter or digit |
(?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])? | up to 63 characters, not ending in a hyphen |
\. | a dot between labels |
+ | one or more labels |
[A-Za-z]{2,63} | the top-level domain |
What it accepts and rejects
Every sample below is checked automatically in JavaScript and Python. The tester above is preloaded with all of them, one per line.
| Should match | |
|---|---|
example.com | ✓ |
sub.example.co.uk | ✓ |
my-site.dev | ✓ |
x.ai | ✓ |
a1.b2.io | ✓ |
xn--80ak6aa92e.com | ✓ |
| Should not match | |
|---|---|
-example.com | ✗ |
example-.com | ✗ |
example | ✗ |
example..com | ✗ |
exa mple.com | ✗ |
http://example.com | ✗ |
Copy it into your code
RE2-safeNo lookarounds or backreferences, so the same pattern works in Go's RE2 engine and in Rust's regex crate.
const domainRe = /^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,63}$/;
export function isValidDomain(value) {
return domainRe.test(value.trim());
}When not to use regex for this
To know whether a domain actually exists or is available, you need DNS or RDAP lookups, not a pattern. The regex doesn't enforce the 253-character total length limit either; check string length separately if it matters.
Questions engineers actually ask
Does it support emoji or non-Latin domains?
Why isn't the 253-character limit checked?
What is catastrophic backtracking?
More web patterns
- Email AddressPragmatic email check: catches typos without rejecting real addresses.^[A-Za-z0-9_%+-]+(?:\.[A-Za-z0-9_%+-]+)*@[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?:\.[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*\.[A-Za-z]{2,}$
- URLhttp(s) URLs with a real domain, optional port, path, query and fragment.^https?:\/\/(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,63}(?::\d{1,5})?(?:[\/?#]\S*)?$
- URL SlugLowercase kebab-case slugs like my-first-post.^[a-z0-9]+(?:-[a-z0-9]+)*$
- IPv4 AddressDotted-quad IPv4 with each octet 0–255 and no leading zeros.^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$
- IPv6 AddressFull and compressed (::) IPv6 addresses.^(?:(?:[0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){1,7}:|(?:[0-9A-Fa-f]{1,4}:){1,6}:[0-9A-Fa-f]{1,4}|(?:[0-9A-Fa-f]{1,4}:){1,5}(?::[0-9A-Fa-f]{1,4}){1,2}|(?:[0-9A-Fa-f]{1,4}:){1,4}(?::[0-9A-Fa-f]{1,4}){1,3}|(?:[0-9A-Fa-f]{1,4}:){1,3}(?::[0-9A-Fa-f]{1,4}){1,4}|(?:[0-9A-Fa-f]{1,4}:){1,2}(?::[0-9A-Fa-f]{1,4}){1,5}|[0-9A-Fa-f]{1,4}:(?::[0-9A-Fa-f]{1,4}){1,6}|:(?:(?::[0-9A-Fa-f]{1,4}){1,7}|:))$
- Hex ColorCSS hex colours: #rgb, #rgba, #rrggbb and #rrggbbaa.^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
- HTML TagFinds opening, closing and self-closing tags in a string. Not a parser.<\/?([A-Za-z][A-Za-z0-9-]*)\b[^<>]*>
Or browse the full regex library.
More from the workbench
Fine print
Tools: on the house.
Engineer: by the hour.
The regex was free. Code that doesn't need one is the upgrade: typed schemas, validated once at the edge, trusted everywhere after.
I'm Himanshu, an AI and full-stack engineer. I build MVPs, AI agents and the growth plumbing around them for early-stage startups.
