Ir para conteúdo
Fórum Script Brasil
  • 0

Expressões Regulares


hlegius

Pergunta

Pessoal,

Comecei a estudar uma minilinguagem chamada "Expressões Regulares", pouco conhecida, não é mesmo?

Então, daí como estou estudando de uma forma global, ou seja separada do PHP, resolvi usa-la nos meus programas PHP, fiz algumas e funciona perfeitamente...

Daí fiz essa:

<?
$url = "www.site.com.br";
$pattern_url = "^((www|http://www)\.)|(http://)[[:lower:]]*\.(com|net|info|biz|org|gov)(\.(br))?$";
$verifica_url = ereg($pattern_url,$url);
if($verifica_url == true){
print "A url <i>$url</i> <b>possui</b> a sintaxe correta!";
}else{
print "A url <i>$url</i> <b>não</b> possui a sintaxe correta";
}; 
?> 
Agora, quando coloco em $url --> www.site.com.br --> http://site.com.br funciona, ele exige o ( http:// + dominio ) ou ( www + . + dominio ) e como vocês podem ver ali, ele também deixa você colocar: ( http://www + . + dominio ) Todas as anteriores funcionam, exeto a ultima, ele deixa eu colocar: http://www.site.com.br como http://wwwsite.com.br ( sem o . ) e o mais engraçado é que ele não deixa eu colocar wwwsite.com.br ( sem o . ) e tanto o ( www ) quanto o ( http://www ) estão na mesma verificação
  
$pattern_url = "^((www|http://www)\.) // continua.... 

Alguém têm idéia do que possa ser?

até... smile.gif

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Se não me engano, o http://wwwsite.com.br'>http://wwwsite.com.br cai dentro da seguinte condição:

<?

$url = "www.site.com.br";

$pattern_url = "^((www|http://www)\.)|(http://)[[:lower:]]*\.(com|net|info|biz|org|gov)(\.(br))?$";

$verifica_url = ereg($pattern_url,$url);

if($verifica_url == true){

print "A url <i>$url</i> <b>possui</b> a sintaxe correta!";

}else{

print "A url <i>$url</i> <b>não</b> possui a sintaxe correta";

};

?>

Ou seja, ele considera o "www" como parte do nome do DNS e não como o www the "world wide web"... smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Se não me engano, o http://wwwsite.com.br'>http://wwwsite.com.br cai dentro da seguinte condição:

<?

$url = "www.site.com.br";

$pattern_url = "^((www|http://www)\.)|(http://)[[:lower:]]*\.(com|net|info|biz|org|gov)(\.(br))?$";

$verifica_url = ereg($pattern_url,$url);

if($verifica_url == true){

print "A url <i>$url</i> <b>possui</b> a sintaxe correta!";

}else{

print "A url <i>$url</i> <b>não</b> possui a sintaxe correta";

};

?>

Ou seja, ele considera o "www" como parte do nome do DNS e não como o www the "world wide web"... smile.gif

Disfarsa... vou até editar o post depois dessa... laugh.gif

hlegius 0 x 1 ER

têm alguma sugestão então?

-----------------editado---------------------

hehehehe...

fiz com uma ajudinha do if

$url = "http://www.site.com.br";

$pattern_url = "^((http://(www.)?|(www)\.))[[:lower:]]*\.(com|net|info|biz|org|gov)(\.(br))?$";

$verifica_url = ereg($pattern_url,$url);

if(($verifica_url == true) and (strstr($url,"www."))or(strstr($url,"http://"))){

print "A url <i>$url</i> <b>possui</b> a sintaxe correta!";

}else{

print "A url <i>$url</i> <b>não</b> possui a sintaxe correta";

}; 

se tiver alguma outra maneira, por favor, me ensine...

até... smile.gif

Editado por hlegius
Link para o comentário
Compartilhar em outros sites

  • 0

Hehehe...REGEXP é assim mesmo, geralmente quando eu acabo de fazer uma eu tenho que decifrar ela de novo porque eu já fiquei todo perdido... happy.gif

É complicado porque pode ter um site cujo nome seja realmente "wwwalgumacoisa"... rolleyes.gif

Mas se você quiser bloquear isso, acho que seria colocando uma lista negada dizendo que não pode haver um "www" depois de um "http://" sem ser seguido de um ponto; mas eu deixaria do jeito que está mesmo... smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Hehehe...REGEXP é assim mesmo, geralmente quando eu acabo de fazer uma eu tenho que decifrar ela de novo porque eu já fiquei todo perdido... happy.gif

É complicado porque pode ter um site cujo nome seja realmente "wwwalgumacoisa"... rolleyes.gif

Mas se você quiser bloquear isso, acho que seria colocando uma lista negada dizendo que não pode haver um "www" depois de um "http://" sem ser seguido de um ponto; mas eu deixaria do jeito que está mesmo... smile.gif

É eu também, crio a ER e depois tenho que ler e reler pois ainda me perco nelas...

...ainda mais agora de inicio, pois comecei a estudar isso foi ontem...

vou ver se com a lista negada sai algo um pouco mais interessante...

Obs: com o if acima, sabe o que descobri? que fiquei na mesma... ainda eu posso colocar: http://wwwsite.com.br ...aff...mas beleza...nada é perfeito...

vlw pelas dicas aí Error404

até... smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Legal.. bem-vindo ao mundo das expressões regulares! biggrin.gif

Bom, se você pensar, uma URL como esta: "http://wwwsite.com.br" (sem o ponto), pode ser considerada uma URL válida. Por exemplo, http://br.php.net

O grupo "wwwmeusite" casa onde tem o "br" ali... entende?

Outra observação: nessa ER que você criou, se o cara colocar uma barra "/" no final da url, como http://www.uol.com.br/, ela interpretará como inválida. E mais uma coisa: se a URL não parar por aí, como por exemplo: http://www.uol.com.br/esportes/, essa ER vai dizer que é inválida, tb. Mas isso é assim mesmo... é difícil a gente cobrir todos os casos possíveis. Ah, mais uma coisa: a URL pode não ter um .com, .net, etc ... pode ter direto um .br, como por exemplo: http://www.unesp.br. você tem que pensar nessa hipótese, tb. smile.gif

Eu criei uma ER... ela não cobre todos os casos possíveis ainda, mas já está um pouco mais aperfeiçoada... dá uma olhada:

$pattern = "'^(www\.|(http:\/\/(www\.)?))([\w]+\.)+?(((com|net|info|biz|org|gov)\.(\w{2})?)|\w{2})\/?'";

$url = "http://www.meusite.com.br";

if (preg_match($pattern, $url)) {

    echo "sim";

} else {

    echo "não";

}

Só mais uma coisa... eu prefiro utilizar as funções preg_match e preg_replace pois elas rodam mais rápido. Uma vez fiz um teste com um script de busca que criei, e era gritante a diferença entre utilizar ereg_replace e preg_replace. Se você precisar de umas dicas, é só falar!

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Opa Illidan,

Seguinte, muito obrigado pelos toques aí

tipo essa do http://www.site.com.br/area realmente eu não havia pensando...

e essa do ereg() e preg_match() eu não sabia...vou começar a utiliza-la nos programas aqui...

agora eu não entendi um barato na sua ER:

([\w]+\.)+?
aki, seria depois do http:// certo? e então seria o dominio do mesmo, e por que você colocou o w e . sendo opcionais e se digitado maior que 1 caractere?

até... smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

agora eu não entendi um barato na sua ER:
([\w]+\.)+?

Bom, hlegius... a minha ER vai começar trabalhando da seguinte forma: ela vai verificar se na URL tem um "http://" ou um "www.". Ela precisa obrigatoriamente começar com uma dessas opções. Se começar com "http://", ela vai verificar se há um "www." depois... mas não é obrigatório.

Aí vem a parte que você perguntou. Ou seja, seria após o "http://www.", ou só "http://", ou ainda "www.". Uma dessas três opções. Veja bem:

([\w]+\.)+?

Aquele "\w" não significa o caractere "w". Quando ele tem essa barra na frente, ele significa uma classe posix (veja aqui), que aceita qualquer caractere alfa-numérico e um "_". Ou seja, eu quero que depois de um daqueles 3 grupos iniciais, ele verifique se vai vir um grupo de 1 ou mais desses caracteres seguidos de um ponto ".". Mas essa seqüência pode se repetir várias vezes antes de chegar no ".com", como por exemplo: http://www.sorocaba.unesp.br

Viu? Aqui ele repetiu 2 vezes. Por isso que eu coloquei aquele quantificador "+" depois do grupo "([\w]+\.)". E eu coloquei uma "?" depois do quantificador para torná-lo "não-guloso". Pois, caso contrário, ele tentaria casar o ".com" tb... e o ".com" a gente quer que case na parte da ER que vem logo depois disso.

beleza, então?

Até mais!

Link para o comentário
Compartilhar em outros sites

  • 0

sakei Illidan...

é que nessa parte aí eu ainda não cheguei..huahaha(estou estudando por esse manual mesmo que você colocou o link...)só que não cheguei no arquivo 31...

muito obrigado pela sua explicação!

até... smile.gif

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,6k
×
×
  • Criar Novo...