[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