Mis amigos, me gustaría pedirles ayuda con mis requisitos de expresiones regulares. Necesito validación de expresiones regulares para dominios según las convenciones para el cliente en JS:
Al principio, pensé que estaría bien tener una expresión regular separada para cada punto, pero creo que la operación consumirá mucho tiempo. ¿Alguien podría ayudarme con el tema?
Mi respuesta a la pregunta "https://stackoverflow.com/questions/6449367/c-sharp-email-address-validation/6459786" podría ayudarlo: https://stackoverflow.com/a/6459786/467473
Implementa un validador de direcciones de correo electrónico en C#. No le importa la "parte local" (la parte que queda de la @ en las direcciones de correo electrónico, o la @ en sí misma. La parte que le interesa es la producción de fqdn y eso debería ser bastante sencillo de asignar a una expresión regular de Javascript .
En una consideración más detallada, parece que lo que está describiendo es una etiqueta DNS, un segmento único de un nombre DNS.
Si lo que desea es validar una etiqueta DNS compatible con RFC, entonces esta expresión regular debería hacerlo:
const rxDnsLabel = /^[AZ]([A-Z0-9-]{0,61}[A-Z0-9])?$/i;Desglosándolo:
^ : ancla el inicio de la coincidencia al inicio del texto, seguido de[AZ] : una letra US-ASCII, seguida de( — un grupo facultativo, compuesto por[A-Z0-9-] : una letra US-ASCII, un dígito decimal o un guión ( - ){0,61} — repetido de 0 a 61 veces, seguido de[A-Z0-9] una sola letra US-ASCII o dígito decimal)? — todo lo cual es opcional$ : ancla el final de la coincidencia al final del textoSi necesita hacer coincidir un nombre DNS que consta de varias etiquetas, no es mucho más complicado. Solo necesita permitir los segmentos adicionales opcionales:
const rxDnsLabel = /^([AZ]([A-Z0-9-]{0,61}[A-Z0-9])?)([.][AZ]([A-Z0-9-]{0,61}[A-Z0-9])?)*$/i; La única diferencia aquí es que la etiqueta inicial puede ir seguida de cero o más etiquetas adicionales, cada una separada por un punto/punto ( . ).
Editado para tener en cuenta: si necesita soporte para nombres de dominio internacionalizados (punycode), no puedo garantizar que esto coincida principalmente porque nunca necesité hacerlo y, por lo tanto, no lo he probado contra ellos. Para obtener detalles sobre los nombres de dominio internacionalizados (punycode), consulte las RF correspondientes:
[RFC 5891: Nombres de dominio internacionalizados en aplicaciones (IDNA): Protocolo ]( https://www.rfc-editor.org/rfc/pdfrfc/rfc5891.txt.pdf