validator validate regular node php regex email-validation tld

php - regular - validate email javascript



¿Cuánto tiempo puede durar un TLD? (5)

Estoy trabajando en una expresión regular de validación de correo electrónico en PHP y necesito saber cuánto tiempo podría durar el TLD y seguir siendo válido. Hice algunas búsquedas pero no pude encontrar mucha información sobre el tema. Entonces, ¿cuánto tiempo puede ser un TLD?


-EDITAR-

Según RFC 2606 .localhost es un nombre de dominio reservado y su longitud es de 9 caracteres. Eso es lo que más tiempo conozco.

-END DE EDITAR-

Sin embargo, creo que debería preocuparse por la longitud de la dirección de correo electrónico y no solo por la longitud del TLD. A continuación hay una cita de this artículo. La longitud de la dirección de correo electrónico es de 254 caracteres:

Parece haber cierta confusión sobre el tamaño máximo de la dirección de correo electrónico válida. La mayoría de la gente cree que tiene 320 caracteres (64 caracteres para el nombre de usuario + 255 caracteres para el dominio + 1 carácter para el símbolo @). Otras fuentes sugieren 129 (64 + 1 + 64) o 384 (128 + 1 + 255, asumiendo que el nombre de usuario se duplica en el futuro).

Esta confusión significa que debe prestar atención al ''principio de robustez'' ("los desarrolladores deben escribir cuidadosamente el software que se adhiere a los RFC existentes pero deben aceptar y analizar los comentarios de sus compañeros que puedan no ser compatibles con esos RFC". correos electrónicos. Además, algunos programas pueden verse paralizados por suposiciones ingenuas, por ejemplo, pensar que 50 caracteres son adecuados ( examples ). Su dirección de correo electrónico de 200 caracteres puede ser técnicamente válida, pero eso no le ayudará si la mayoría de los sitios web o aplicaciones lo rechazan.

La longitud máxima real del correo electrónico es actualmente de 254 caracteres:

"La versión original de RFC 3696 dijo que 320 era la longitud máxima, pero John Klensin (ICANN) aceptó posteriormente que esto estaba mal".

"Esto se debe a la aritmética simple de la longitud máxima de un dominio (255 caracteres) + la longitud máxima de un buzón (64 caracteres) + el símbolo @ = 320 caracteres. Incorrecto. Este canard está documentado en la versión original de RFC3696 . se corrigió en la errata. En realidad, hay una restricción de RFC5321 en el elemento de ruta de una transacción SMTP de 256 caracteres. Pero esto incluye corchetes en ángulo alrededor de la dirección de correo electrónico, por lo que la longitud máxima de una dirección de correo electrónico es de 254 caracteres.


DNS permite un máximo de 63 caracteres para una etiqueta individual.


El TLD más largo actualmente en existencia es de 24 caracteres y está sujeto a cambios. La longitud máxima de TLD especificada por RFC 1034 es de 63 octetos.

Para obtener la longitud del TLD más largo existente:

wget -qO - http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L

Esto es lo que hace ese comando:

  1. Obtenga la lista más reciente de TLD existentes de la IANA
  2. Pele la primera línea, que es un comentario largo.
  3. Lanzar wc para contar la línea más larga.

Alternativa utilizando curl gracias a Stefan:

curl -s http://data.iana.org/TLD/tlds-alpha-by-domain.txt | tail -n+2 | wc -L


El más largo con letras latinas es .MUSEUM ( fuente ), pero hay algunos con caracteres especiales. El más largo de ellos es XN - CLCHC0EA0B2G2A9GCD. Además, en poco tiempo, será posible reservar su propio TLD a un precio alto y, por lo tanto, será más largo.


Este es el código PHP para obtener una lista actualizada UTF-8 TLD UTF-8 separados por barras verticales que se utilizarán directamente en una expresión regular:

<?php function getTLDs($separator){ $tlds=file(''http://data.iana.org/TLD/tlds-alpha-by-domain.txt''); array_shift($tlds); // remove heading comment usort($tlds,function($a,$b){ return strlen($b)-strlen($a); }); // sort from longest to shortest return implode($separator,array_map(function($e){ return idn_to_utf8(trim(strtolower($e))); },$tlds)); } echo getTLDs(''|''); ?>

Puedes verlo en acción here .

Para hacer coincidir un nombre de host, puedes usarlo así:

$tlds=getTLDs(''|''); if (preg_match("{([/da-z/.-]+)/.($tlds)}u",$address)) { .. }