ruf space, techblog sobre webstandards e cotidiano web.
12/04, 2006 20:50 por Fellipe
Se precisamos validar campos de formulários via JavaScript, logo vamos ao Google, pesquisamos, e na primeira página de resultados achamos dezenas de soluções que já fazem isso com maestria. O pessoal realmente mata a pau, pois os scripts prontos são muito bem pensados.
Um dia, para infelicidade de um amigo meu, aquela página de resultados não bastou. Ele tinha em mãos um caso muito específico e não poderia achar em lugar algum uma solução que o deixasse satisfeito. Seu caso era único. Ele teria mesmo é que criar no braço
uma regra de validação para um campo de formulário.
O caso não é muito complexo. O campo de formulário seria alimentado com o id de usuário que a empresa do meu amigo trabalha. Esse id tem a seguinte composição:
Exemplos: F20-199, F77-8765, P00-000000, P11-111.
E ele, meu amigo, pediu ajuda. Como eu conheço um pouquinho de expressões regulares, usá-las foi a primeira forma de solucionar o problema que me veio à mente. Aliás, minha forma de pensar divide-se em duas através dos tempos: Quando eu não sabia fazer expressão regular e agora que sei. Falo sério, são tantas aplicações e facilidades geradas através de regex que chego a achar que é simplesmente burrice trabalhar com codificação sem conhecer este recurso.
Para você não cair no meu conceito, rs, aprenda regex no site aurelio.net e compre o livro do autor, Aurélio Marinho Jargas. Dou nota com todos os dedos das mãos, pois o conteúdo digital e impresso são ótimos e idênticos, apesar de não termos que pagar pelo que está online. Isso sim que é ter fortaleza no próprio trabalho. Aposto que o Aurélio não deixa de vender por conta disso… pelo contrário.
Não foi difícil achar um JavaScript que me desse espaço para eu fazer o que precisava. Agora, era só me basear nele e por a mão na massa.
Contudo, antes de sair codificando, precisei pensar em como seria minha expressão regular. Conclusão:
Por quê? Vamos ver passo a passo.
^. Ele diz que a expressão a ser analisada (string) deve encontrar-se no começo da linha. Nada pode estar antes dela.^, o caractere $ significa o fim da linha. Ou seja, depois deste símbolo, a única coisa existente pode ser apenas uma quebra de linha. ^ e $ na mesma expressão, pressupõe-se que nossa string ocupa uma linha inteira, ou então, um campo de formulário inteiro.[PF] simboliza um grupo. Neste caso, o grupo é composto da letra P e F. A ordem não importa. O que eu quero dizer com isso é que posso aceitar apenas uma linha começando com a letra P ou F, e nenhuma mais. {1} eu limito a quantidade de vezes que um membro do grupo pode aparecer. Como é uma unidade apenas, o uso é opcional, somente coloquei para ilustrar.[0-9]. Ou seja, uma área, que pode ir de 0 até 9. O equivalente literal é [0123456789]. Dá pra fazer a mesma coisa com letras, usando [a-z]. Case sensitive, sempre.{2}, né?[0-9].{3,6}. O que quer dizer que posso ter um mínimo de 3 e um máximo de 6 caracteres (numéricos, neste caso).E desvendado o terrível segredo da temível expressão regular, posso construir a minha função em Javascript usando-a.
Criei a seguinte função:
[code lang=”javascript”]
// Criamos um objeto chamado regra
var regra = new Object();
// e atribuimos valor à algumas propriedades deste objeto, neste caso, as regex
regra.id = /^[PF]{1}[0-9]{2}-[0-9]{3,6}$/i;
regra.tel = /^[0-9]{4}-[0-9]{4}$/i;
regra.cep = /^[0-9]{5}-[0-9]{3}$/i;
function validate(campo, tipo) {
// conforme o parâmetro tipo, selecionamos a propriedade do objeto em sel
var sel = regra[tipo];
// e finalmente, em ver, guardamos o resultado da validação feita pelo método exec() no valor do input em questão
var ver = sel.exec(campo.value);
// ver é false e tem dados no campo?
if(!ver && campo.value!=”"){
alert(’A identificação ‘+campo.value+’ não é válida.’);
return false;
}
return true;
}
// that’s all folks
[/code]
Através da chamada validate(campo do formulário, tipo de validação) no próprio evento onBlur de um campo de formulário, é possível verificar se o que foi digitado corresponde com as regras da minha regex .
Acredito que a função em si é auto-explicativa
Para fechar esse artigo, criei uma página que usa uma função parecida com essa e permite que possamos testar nossas próprias expressões regulares. Crie as suas e teste-as lá. Ou, caso use Firefox, baixe uma excelente extensão que também valida suas regex, o Regular Expression Tester.
Agora você está quase apto a entender códigos-fonte de Perl, hehehe.
Este artigo foi publicado Wednesday, 12 de April de 2006 às 20:50 e foi categorizado como Cookbook, DOM Lab.
Você pode acompanhar os comentários deste post assinando o comment RSS (RSS 2.0 [?]).
Você também pode comentar ou atrelar um trackback [?] daqui no seu site.
13 de April, 2006 às 11:51
Interessantíssimo! Não sabia q expressão regular tb tinha essa aplicação!
15 de April, 2006 às 14:41
É nessa hora que eu acho uma pena não dominar JS pra acrescentar alguma coisa ou mesmo atrapalhar hahaha…
16 de April, 2006 às 18:07
Não preciso nem falar da sua didática não é?! Já comentei isso antes e repito: muito boa. Explicação passo-a-passo da expressão regular, facilitando para os leigos. Bom trabalho Fellipe!
18 de April, 2006 às 11:14
Muito bom!
Resolvi pesquisar e achei uma pagina com uma biblioteca de expressões regulares.
http://regexlib.com/default.aspx
Espero que seja util
21 de April, 2006 às 16:20
invadindo seu blog na verdade.
não li o post Expressões Regulares em Javascript, na verdade, estou aqui pra tirar uma duvida quanto a um comentario seu em outro blog.
o post:
http://www.revolucao.etc.br/archives/a-etica-invisivel-dos-blogs/
fragmento do seu comentário:
Portanto, é válido criticar a vida como ela é através do blog, e isso inclui empresas e outras pessoas. Não que isso seja profissionalmente ético, mas é humanamente natural.
você defende então posts por assuntos pessoais em blogs de um determinado assunto? o qual sempre obvio, e lembrando não ser o ‘diário’ do escritor.
Fiquei entrigada com seu comentário, desculpe a invasão. Mas gostaria de saber oque pensa a respeito.
07 de May, 2006 às 16:07
oi felipe,
parabéns pelo artigo, leitura agradável de um tema indigesto como as ers. adicionei-o na minha página de expressões regulares.
muito obrigado pela menção positiva ao meu livro!
aproveitando a visita, dei uma navegada no site e como estou começando a ficar bastante interessado em CSS e web standards, aprendi muito. buquemarqueado .
abração!
15 de July, 2007 às 17:02
adorei a matéria parabéns!
13 de November, 2007 às 09:52
Como posso conseguir um Expressão regular que remova espaços de um string JavaScript
18 de June, 2010 às 21:05
Parabéns pelo post, didática perfeita, sempre tive muitos problemas para entender como funcionam as expressões regulares e seu post me esclareceu muito.