Regex para nombre de dominio

Usa /^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}$/ para comprobar que una cadena completa es un nombre de dominio válido. Cada ejemplo de abajo se ha probado con el patrón, y puedes abrirlo en el Probador de Regex con las muestras ya cargadas.

Actualizado el

/^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}$/
Abrir en el Probador de Regex
EntradaResultado
example.com✓ Coincide
sub.example.co.uk✓ Coincide
my-site.dev✓ Coincide
-example.com✗ No coincide
example✗ No coincide
example-.com✗ No coincide
https://example.com✗ No coincide

Cómo funciona el patrón

ParteSignificado
[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?Una etiqueta de 1–63 caracteres que no empieza ni termina con un guion
\.Un punto después de cada etiqueta
(?:…)+Una o más etiquetas (subdominios)
[A-Za-z]{2,}$El dominio de nivel superior

Ejemplos de código

JavaScript

const re = /^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}', value))

PHP

preg_match('/^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}$/', $value) === 1;

Notas y limitaciones

Los dominios internacionalizados deben convertirse primero a su forma punycode (xn--…). Consulta los registros de un dominio con el DNS Lookup.

Preguntas frecuentes

¿Cuál es la regex para nombre de dominio?
/^(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z]{2,}$/ — coincide con la cadena completa. Consulta la tabla de arriba para ver qué hace cada parte.
¿Qué ejemplos coinciden?
De los ejemplos probados, coinciden estos: example.com, sub.example.co.uk, my-site.dev. Los demás no.
¿Cómo pruebo esta regex?
Haz clic en “Abrir en el Probador de Regex”: el patrón, los flags y el texto de muestra se cargan automáticamente, y las coincidencias se resaltan mientras editas.