Página 1 de 1

Validar IRI/URL en Perl. Expresiones regulares

NotaPublicado: 2013-03-08 08:24 @391
por Haidion
Hola,

Quería saber si alguien conoce algún método para validar una IRI (RFC 3987) en Perl. O en su defecto, qué caracteres habría que pedir que no estuviesen presentes en la IRI. O algún documento donde esté explícitamente explicado.

Desde ya, muchas gracias.

Re: Validar IRI/URL en Perl. Expresiones regulares

NotaPublicado: 2013-03-08 19:21 @848
por explorer
Bienvenido a los foros de Perl en Español, Haidion.

¡Vaya problema!

El caso es que en un IRI puede venir casi cualquier carácter...

Según el RFC, serían los caracteres codificados como UCS siguientes:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
   iunreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~" / ucschar

   ucschar        = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF
                  / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD
                  / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD
                  / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD
                  / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD
                  / %xD0000-DFFFD / %xE1000-EFFFD

   iprivate       = %xE000-F8FF / %xF0000-FFFFD / %x100000-10FFFD
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Vamos, casi todos. Y además, puede venir en notación escapada ('%' con dos dígitos hexadecimales). O incluso en formato punycode...

En la función as_iri(), del módulo URI, hay una expresión regular para transformar la notación escapada a una cadena de caracteres Unicode puros.

Poco más se me ocurre...

Mírate el módulo Mozilla::DOM::URI, que trae soporte para dominios internacionales. A lo mejor por ahí encuentras la solución.

Edito: Encontrado

Edito 2: Mucho mejormás explicado (en inglés)