[Cascavel-pm] ER's

Luis Campos de Carvalho monsieur_champs em yahoo.com.br
Segunda Junho 20 05:47:34 PDT 2005


--- Marcilio <marciliomoura em uai.com.br> escreveu:
> Boa noite Lista, estou escrevendo um CGI em Perl e gostaria
> de uma ajuda na filtragem de um campo, no caso o DNS que o
> usuário vai digitar, usei esta expressão :
> print "Erro" if $DNS_PRIMARIO =~ /[^0-9.^]|\^/;
> Porém não restringe quantos pontos vão ser digitados nem a
> faixa IP tipo Ip valido ou Invalido,quantas casas etc...
> alguem tem algum exemplo ou pode me dar um help ?

  Oies, Marcílio.
  Está com sorte de eu estar atrasado para o trabalho. :-)

  Use a expressão 

    m/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/o;

  é a mais rápida, simples e legível.
  Ela garante que os endereços são sempre quatro octetos de 1 a 3 dígitos decimais cada.

  Se você quiser ainda mais consistência, pode usar 

    m/(?:(?:(?:[01]?\d?\d|2[0-5]\d)\.){3}(?:[01]?\d?\d|2[0-5]\d))/o;

  Que assegura que os octetos vão apenas de 0 a 255, obrigatoriamente.

  Para ficar mais didático, você pode construir ela assim:

  my $ip_regexp;
  { # Uma expressão regular _legível_ para endereços IP válidos.
    my $octet = qr/(?:[01]?\d?\d|2[0-5]\d)/o;
    my $dot = qr/\./o;
    $ip_regexp = qr/(?:$octet$dot){3}(?:$octet)/o;
  }
  
  Posso tentar estabelecer faixas válidas (e rejeitar as faixas "reservadas", como o 127.0.0.0/8)
se você achar útil. Mas alguém vai precisar me ajudar a lembrar todas as faixas reservadas... ;-)

  Se você tiver problemas, volte a escrever.
  Putamplexos!

--
Luis Campos de Carvalho
Member of "São Paulo Perl Mongers",
Unix SysAdmin & OCP/DBA Oracle
http://br.geocities.com/monsieur_champs/

__________________________________________________
Converse com seus amigos em tempo real com o Yahoo! Messenger 
http://br.download.yahoo.com/messenger/ 


Mais detalhes sobre a lista de discussão Cascavel-pm