• Publicidad

Validación FTP mediante expresión regular

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Validación FTP mediante expresión regular

Notapor icsbcn » 2010-07-19 04:02 @210

¡Es verdad! No lo había probado.

Lo probaré y te diré cómo me ha ido...
icsbcn
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2010-07-15 10:22 @473

Publicidad

Re: Validación FTP mediante expresión regular

Notapor salva » 2010-07-19 04:11 @216

icsbcn escribiste:Necesitaba una expresión regular que validara:

-> Ip's
-> URL's (http/https)
-> FTP's
-> Dominios


Que en vez de una expresión regular que lo haga todo que es mejor que uses 3: una para IPs, otra para hosts/dominios y otra para urls.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Validación FTP mediante expresión regular

Notapor icsbcn » 2010-07-19 04:35 @232

Hola Salva,

Es lo que he hecho. Y las he juntado mediante OR's.

Saludos.
icsbcn
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2010-07-15 10:22 @473

Re: Validación FTP mediante expresión regular

Notapor icsbcn » 2010-07-19 10:36 @483

explorer escribiste:Más información específica sobre ftp en Regexp::Common::URI::ftp.


Hola,

Igual que usáis $RE{URI}{FTP}{-password} para saber si un string es un ftp, ¿cuál usaríais para saber si es una IP o una URI (http/https)?
icsbcn
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2010-07-15 10:22 @473

Re: Validación FTP mediante expresión regular

Notapor explorer » 2010-07-19 10:54 @496

Pues... viendo la documentación de Regexp::Common::URI::http, debería ser

$RE{URI}{HTTP}{-scheme => 'https?'}

y

para las direcciones IPv4, tienes el módulo Regexp::Common::net.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Validación FTP mediante expresión regular

Notapor icsbcn » 2010-07-20 02:59 @166

Hola,

Primero de todo, ¡muchas gracias por vuestra ayuda!

Creo que ya lo tengo todo... Mirad:

Primero, valido la entrada mediante la siguiente regex:

^(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])){3}(:(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[0-5]?([0-9]){0,3}[0-9]))?$)|(^(https?://)?(([0-9a-z_!~*'().&=+$%-]+:)?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$)|(?:(?:ftp)://(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'();&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))(?::(?:(?:(?:[a-zA-Z0-9\-_.!~*'();&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?@)?(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::(?:(?:[0-9]*)))?(?:/(?:(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:/(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))(?:;type=(?:[AIai]))?))?)

Entonces, obtengo el valor (que ya sé que es o una IP, o un HTTP o un HTTPS o un FTP o un dominio). Y para saber cual de ellos es, uso:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($contingut =~ $RE{net}{IPv4}{dec}) {
  2.    print("Es una IP\n");
  3. } elsif ($contingut =~ $RE{URI}{HTTP}{-scheme => 'https?'}) {
  4.    print("Es http o https\n");
  5. } elsif ($contingut =~ $RE{URI}{FTP}{-password}) {
  6.    print("Es un ftp\n");
  7. } else {
  8.    print("Es un dominio\n");
  9. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¿Qué os parece?
icsbcn
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2010-07-15 10:22 @473

Re: Validación FTP mediante expresión regular

Notapor salva » 2010-07-20 03:20 @181

Si estas usando una versión de Perl reciente (5.10 o posterior), puedes utilizar la construcción given/when que hara que tu código sea más claro:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use 5.010;
  2.  
  3. given ($contingut) {
  4.   when (/^$RE{net}{IPv4}{dec}$/o) {
  5.     say "Es una IP";
  6.   }
  7.   when (/^$RE{URI}{HTTP}{-scheme => 'https?'}$/o) {
  8.     say "Es http o https";
  9.   }
  10.   when (/^$RE{URI}{FTP}{-password}$/o) {
  11.     say "Es un ftp";
  12.   }
  13.   default {
  14.     say "Es un dominio";
  15.   }
  16. }
  17.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680

Re: Validación FTP mediante expresión regular

Notapor explorer » 2010-07-20 03:29 @187

¿Haces dos veces la ejecución de una expresión regular?

¿No es mejor hacerla solo una vez?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Validación FTP mediante expresión regular

Notapor icsbcn » 2010-07-20 03:35 @191

Tienes toda la razón. El problema es que me veo obligado a hacerlo así ya que la primera validación no la controlo yo, sino que lo hace un programa externo al que le paso una expresión regular y él se encarga de validar y de retornar el "input" introducido...
icsbcn
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2010-07-15 10:22 @473

Re: Validación FTP mediante expresión regular

Notapor icsbcn » 2010-07-20 03:41 @195

Hola de nuevo,

Ahora me toca seguir trabajando con las expresiones regulares... Ahora me toca tratar el "input" obtenido...

Es decir,

Si es una IP, debo dividir entre el valor de la IP y el puerto si existiera.
Si es una URL, debo dividir entre el valor del protocolo, nombre dominio, puerto y archivo (index.html) si existiera.
Si es un FTP, además también debería almacenar user y password si existiera.
Si es un dominio, sólo debería almacenar el nombre de dominio y el puerto y el archivo si existieran.
icsbcn
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2010-07-15 10:22 @473

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 1 invitado

cron