sexta-feira, 8 de maio de 2009

Usando expressões regulares simples no rails

Ontem precisei de verificar se um campo texto estava sendo digitado corretamente conforme uma sintaxe bem parecida com CSV, era para verificar uma lista de extensões de arquivos da seguinte forma ".ext" para uma extensão ".ext,.ext2,.ext3" para mais de uma extensão.
A expressão regular simples seria algo do tipo

.(C|N)+(,.(C|N)+)* onde C=caracteres e N números(0a9)

em ruby a expressão foi muito fácil de ser construida e foi a seguinte
/\.\w+(,\.\w+)*/

\. é o caracter "."
\w qualquer palavra (com ou sem números)


#controller
def verifica_texto(txt)
filtro_ext = /\.\w+(,\.\w+)*/
return filtro_ext.match(lista).to_s
end

Se retornar true é que a expressão está correta.

Quando estava escreendo a expressão usei um avaliador de expressões
http://www.rubular.com/
Ao escrever a expressão ele avalia os resultados dado o conjunto passado
muito bom mesmo

Listas de elementos usados nas expressões

[] faixa de caracteres ([a-z] das letras a até z)
\w caracteres usados em palavras; mesmo que [0-9A-Za-z_]
\W caracteres não usados em palavras
\s espaço; mesmo que [ \t\n\r\f]
\S diferente de espaço
\d números, mesmo que [0-9]
\D diferente de números
\b backspace (0x08) (usado somente em faixas)
\b início ou fim de uma palavra (não usado em faixas)
\B diferente de \b
* zero ou mais repetições
+ uma ou mais repetições
{m,n} de m até n repetiçõ
? no máximo uma ocorrência
| OU (operador lógico)
() conjunto

mais exemplos e explicações em:
http://www.rubyist.net/~slagell/ruby/regexp.html

Nenhum comentário:

Postar um comentário