Saltar al contenido

¿Cómo validar un nombre de dominio usando Regex & Php?

Solución:

La respuesta aceptada es incompleta / incorrecta.

El patrón de expresiones regulares;

  • no debe validar dominios como:
    -domain.com, domain--.com, -domain-.-.com, domain.000, etc …

  • deberían validar dominios como:
    schools.k12, newTLD.clothing, good.photography, etc …

Después de algunas investigaciones adicionales; A continuación se muestra el patrón más correcto, en varios idiomas y compacto que se me ocurrió:

^(?!-)(?:(?:[a-zA-Zd][a-zA-Zd-]{0,61})?[a-zA-Zd].){1,126}(?!d+)[a-zA-Zd]{1,63}$

Este patrón cumple con la mayoría * de las reglas definidas en las especificaciones:

  • Cada etiqueta / nivel (dividido por un punto) puede contener hasta 63 caracteres.
  • El nombre de dominio completo puede tener hasta 127 niveles.
  • El nombre de dominio completo no puede exceder la longitud de 253 caracteres en su representación textual.
  • Cada etiqueta puede constar de letras, dígitos y guiones.
  • Las etiquetas no pueden comienzo o fin con un guion.
  • El dominio de nivel superior (extensión) no se puede todo numérico.

Nota 1: La verificación de la longitud completa del dominio no está incluida en la expresión regular. Debería comprobarse simplemente con métodos nativos, por ejemplo strlen(domain) <= 253.
Nota 2: Este patrón funciona con la mayoría de los lenguajes, incluidos PHP, Javascript, Python, etc.

Ver DEMO aquí (para JS, PHP, Python)

Más información:

  • La expresión regular anterior no admite IDN.

  • No hay ninguna especificación que diga que la extensión (TLD) debe tener entre 2 y 6 caracteres. En realidad, admite 63 caracteres. Ver la corriente Lista de TLD aquí. Además, algunas redes utilizan internamente TLD personalizados / pseudo.

  • Las autoridades de registro pueden imponer algunas reglas específicas adicionales que no se admiten explícitamente en esta expresión regular. Por ejemplo, .CO.UK y .ORG.UK debe tener al menos 3 caracteres, pero menos de 23, sin incluir la extensión. Este tipo de reglas no son estándar y están sujetas a cambios. No los implemente si no puede mantenerlos.

  • Las expresiones regulares son excelentes, pero no la mejor solución eficaz y eficaz para todos los problemas. Por lo tanto, se debe usar un analizador de URL nativo en su lugar, siempre que sea posible. por ejemplo, Python urlparse() método o PHP parse_url() método…

  • Después de todo, esto es solo una validación de formato. ¡Una prueba de expresiones regulares no confirma que un nombre de dominio esté realmente configurado / exista! Debe probar la existencia haciendo una solicitud.

Especificaciones y referencias:

  • IETF: RFC1035
  • IETF: RFC1123
  • IETF: RFC2181
  • IETF: RFC952
  • Wikipedia: sistema de nombres de dominio

ACTUALIZAR (21/12/2019): Guión inicial fijo con subdominios.

Qué tal si:

^(?:[-A-Za-z0-9]+.)+[A-Za-z]{2,6}$
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *