Pegando apenas letras, números e UM ponto

52 views
Skip to first unread message

Anderson Fraga

unread,
Jul 29, 2009, 12:34:55 PM7/29/09
to expressoes...@googlegroups.com
Olá lista!
 
    Estou fazendo algumas regras no meu .htaccess e acabei 'esbarrando' no seguinte problema:
   
    Preciso fazer com que ele aceite, em determinado momento, apenas letras, número e UM ÚNICO ponto.
 
    O que eu tenho, atualmente e funcionando muito bem, é esse:
       
        RewriteCond %{QUERY_STRING}  ^.*\.[A-Za-z0-9].* [NC,OR]
 
    Acontece que não sei onde/como colocar a regra do ponto único aí!
 
 
Alguma ajuda?
 
Muito obrigado desde já.
 
 
Abraços!

Felipe Pena

unread,
Jul 29, 2009, 12:47:33 PM7/29/09
to Expressões regulares
On 29 jul, 13:34, "Anderson Fraga" <gro...@andersonfraga.net> wrote:
> Olá lista!
>
>     Estou fazendo algumas regras no meu .htaccess e acabei 'esbarrando' no seguinte problema:
>
>     Preciso fazer com que ele aceite, em determinado momento, apenas letras, número e UM ÚNICO ponto.
>
>     O que eu tenho, atualmente e funcionando muito bem, é esse:
>
>         RewriteCond %{QUERY_STRING}  ^.*\.[A-Za-z0-9].* [NC,OR]
>
>     Acontece que não sei onde/como colocar a regra do ponto único aí!
>
> Alguma ajuda?
>

Olá!

Veja bem, como você está usando NC, você não precisa usar A-Za-z,
apenas A-Z. NC = No Case

Outra coisa:
[A-Za-z0-9].* isso quer dizer: uma letra ou numero seguido de qualquer
coisa, ou seja, você só tá verificando mesmo 1 letra/número dessa
forma.


Enfim, como solicitado, para permitir somente 1 ponto, você poderia
utilizar algo como:
^[^.]*\.[A-Z0-9]+$ [NC,OR]

Anderson Fraga

unread,
Jul 29, 2009, 1:05:55 PM7/29/09
to expressoes...@googlegroups.com
Olá,

Sobre o NC, foi falha minha. rsrs

Bom, implementei sua solução mas infelizmente não deu muito certo.

A regra seria aceitar, basicamente, isso:
abc=123a&def=grupo.regex

Mas, claro, coibir isso:
abc=123a&def=grupo.regex.google ou então abc=123.a&def=grupo.regex


Explicando bem explicado, estou elaborando uso para urls amigáveis.
E, no script, ele deve aceitar o .html ao final da url.

Acontece que eu gostaria de prevenir urls do tipo &arquivo=..arquivo.php,
compreendeu?


Obrigado pela resposta! :D

Abraços!
Sds,
Anderson Fraga
www.andersonfraga.net
con...@andersonfraga.net

caio ariede

unread,
Jul 29, 2009, 2:12:20 PM7/29/09
to expressoes...@googlegroups.com
Cara, não ficou muito clara a sua duvida, explique *o que* não deu certo na expressão do Felipe...

De qualquer forma, fiz uma expressão da forma que eu compreendi:

RewriteCond %{QUERY_STRING}  ^[^.]*\.?[^.]*$ [NC,OR]

Caio Ariede
http://caioariede.com/


2009/7/29 Anderson Fraga <gro...@andersonfraga.net>

Anderson Fraga

unread,
Jul 29, 2009, 3:19:31 PM7/29/09
to expressoes...@googlegroups.com
Rsrsrsrs
 
Caio, simplesmente não funcionou. Experimentei colocar a expressão 'abc=teste&def=index.html..' e deu um redirecionamento infinito. :)
Detalhe para o '..' no final do .html..
Isso que eu quero evitar. Queria que, caso ocorresse esse tipo de coisa, ele retornasse um 'false' apenas.

caio ariede

unread,
Jul 30, 2009, 8:39:18 AM7/30/09
to expressoes...@googlegroups.com
Você testou a expressão que te passei?

Verifique também as outras condições, já que o seu RewriteCond possui uma alternativa *OR*.

Anderson Fraga

unread,
Jul 30, 2009, 12:39:19 PM7/30/09
to expressoes...@googlegroups.com
Olá Caio.
 
A expressão que tu enviou também não foi executada 'corretamente' :/
 
A expressão inteira que eu tenho é a seguinte:
 
RewriteCond %{QUERY_STRING}  ^.*(;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).* [NC,OR]

RewriteCond %{QUERY_STRING}  ^[^.]*\.?[^.]*$ [NC,OR]
RewriteCond %{QUERY_STRING}  ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC]
 
RewriteRule ^(.*)$ access.php
 
Ele efetua uma espécie de loop infinito quando coloco a sua expressão e não acontece nada quando coloco a expressão do Felipe.

caio ariede

unread,
Jul 31, 2009, 8:34:41 AM7/31/09
to expressoes...@googlegroups.com
O que acontece, é que a minha expressão esta casando com "" (nada),
que é o caso do access.php que não contém QUERY_STRING.

Você pode tentar de duas formas, assim:

RewriteCond %{QUERY_STRING} ^([^.]+\.)?[^.]+$ [NC,OR]

Ou, assim:

RewriteCond %{QUERY_STRING} ^.+$ [NC]
RewriteCond %{QUERY_STRING} ^[^.]*\.?[^.]*$ [NC,OR]

Se não der, tente exemplificar melhor o seu problema, assim podemos
melhorar essas regras ai.

Outra coisa, ao invés de usar (|), use lista negada.

(;|<|>|'|"|\) por [;<>'"\\]

Veja que esse \ pode estar "escapando" o ).

Caio Ariede
http://caioariede.com/



2009/7/30 Anderson Fraga <gro...@andersonfraga.net>:

Anderson Fraga

unread,
Jul 31, 2009, 4:51:35 PM7/31/09
to expressoes...@googlegroups.com
Olá Caio!

Bom, testando seu script (o primeiro do ultimo email) aqui agora, funcionou
perfeitamente!
Agradeço!

O que eu queria era basicamente o que ele está fazendo, evitar .. na
query_string!
Reply all
Reply to author
Forward
0 new messages