Documentos de Académico
Documentos de Profesional
Documentos de Cultura
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
Tecnologias
Revistas
Cursos LOGIN:
Pocket videos
DevWare SENHA:
Frum
Servios
Publicar
Comprar
Cadastre-se
post favorito
comentrios
Curtir
Gostei (3)
(0)
Uma expresso regular (ER) um mtodo formal de se especificar um padro de texto, simplificando um pouco mais, as expresses regulares so strings especialmente formatadas, usadas para localizar padres no texto, e podem ser teis durante a validao informaes, para que os dados estejam em um formato especfico.
Nesse artigo voc aprender a utilizar e criar expresses regulares no AspNet C#. Tambm tomar conhecimento do significado de cada expresso, bem como o conjunto de caracteres usado na elaborao de uma expresso regular. Espero vocs no prximo artigo. Boa leitura a todos e at a prxima.
Requisitos Necessrios
Para uma melhor compreenso do artigo indispensvel que o leitor tenha conhecimento AspNet C#. Alm disso disso algumas ferramentas so necessrias.
Conceitos Bsicos A maioria dos formalismos provm pelo menos trs operaes para construir expresses regulares. (WIKIPEDIA) A primeira delas a alternncia, em que uma barra vertical (|) separa alternativas. Por exemplo, psicadlico|psicodlico pode casar "psicadlico" ou "psicodlico". A segunda operao o agrupamento, em que parnteses ((, )) so usados para definir o escopo e a precedncia de operadores, entre outros usos. Por exemplo, psicadlico|psicodlico e psic(a|o)dlico so equivalentes e ambas descrevem "psicadlico" e "psicodlico". Por fim, a terceira operao a quantificao (ou repetio). Um quantificador aps um token (como um caractere) ou um agrupamento especifica a quantidade de vezes que o elemento precedente pode ocorrer. Os quantificadores mais comuns so ?, * e +. O ponto de interrogao indica que h zero ou uma ocorrncia do elemento precedente. Por exemplo, ac?o casa tanto "aco" quanto "ao". J o asterisco indica que h zero ou mais ocorrncias do elemento precedente. Por exemplo, ab*c casa
1 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
"ac", "abc", "abbc", "abbbc", e assim por diante. Por fim, o sinal de adio indica que h uma ou mais ocorrncias do elemento precedente. Por exemplo, ab+c casa "abc", "abbc", "abbbc", e assim por diante, mas no "ac". (WIKIPEDIA) Essas construes podem ser combinadas arbitrariamente para formar expresses complexas, assim como expresses aritmticas com nmeros e operaes de adio, subtrao, multiplicao e diviso. De forma geral, h diversas expresses regulares para descrever um mesmo conjunto de cadeias de caracteres. A sintaxe exata da expresso regular e os operadores disponveis variam entre as implementaes. ( WIKIPEDIA)
\b
\B
Alfa-numrica
\\
[abc]
Encontra qualquer caractere que estiver dentro do grupo. Voc pode usar hfen para denotar escala. Por Exemplo. [a-z] encontra qualquer letra do alfabeto. [0-9] encontra qualquer dgito.
[^abc]
Encontra qualquer caractere que no estiver dentro do grupo. O circunflexo indica que nenhum caractere deve estar na string. Observao: O circunflexo usado dentro da classe de caractere diferente do que denota o incio da string, no se confundam. A negao aqui s permitida dentro dos sinais.
(Ponto). Encontra qualquer caractere exceto o caractere de nova linha ou terminador de linha Unicode.
2 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
\w
\W
Encontra qualquer caractere que no se encontra na classe dos alfanumricos. Equivalente a [^a-zA-Z0-9_].
\d
\D
\s
\S
{x}
{x,}
{x,y}
()
Agrupamento de caracteres para criar uma clusula de condio. Pode estar aninhado.
Combina clusulas de condies dentro de uma expresso regular e ento encontra qualquer uma das clusulas. Similar expresso "OR".
( )\n
Encontra uma clusula entre parnteses. n o nmero de clusulas para a esquerda da backReference.
3 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
A plataforma .NET fornece vrias classes para ajudar os desenvolvedores a reconhecerem e manipularem expresses regulares. A classe Regex (espao de nomes System.Text.RegularExpressions) representa uma expresso regular imutvel. Ela contm mtodos estticos que permitem o uso da classe Regex sem instanciar explicitamente objetos dessa classe. A classe Match representa os resultados de uma operao de correspondncia com uma expresso regular. (DEITEL, 2006)
A classe Regex fornece o mtodo Match, que retorna um objeto da classe Match representando uma nica correspondncia com uma expresso regular. Regex tambm fornece o mtodo Matches, que retorna todas as correspondncias de uma expresso regular em uma string arbitrria e retorna um objeto MatchCollection, ou seja, um conjunto de objetos Match. (DEITEL, 2006)
Agora que j aprendemos sobre Expresses Regulares na teoria, vamos ver na prtica como isso funciona e como pode ser utilizado em uma aplicao Web. Abra o Visual Studio 2005/2008 ou Web Developer 2005/2008, crie um novo Web Site e d o nome de ExpressoesRegulares.
4 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
Abra o arquivo Default.aspx e adicione um controle Label e um controle Button ao formulrio. Para o controle Button, adicione o evento Button1_Click conforme a listagem_01 apresentada abaixo.
<form id="form1" runat="server"> <table id="table1" cellpadding="0" cellspacing="0" border="0" width="720px"> <tr> <td colspan="3"><asp:Label ID="Label1" runat="server" Text="">asp:Label>td> tr> <tr> <td height="30px" colspan="3">td> tr> <tr> <td width="30%" align="right">Testar:td> <td> td>
5 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
<td align="left"><asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />td> tr> table> form>
Depois de j ter concludas as alteraes no formulrio, abra o arquivo Default.aspx.cs e adicione o seguinte cdigo, conforme a listagem_02 apresentada abaixo.
protected void Button1_Click(object sender, EventArgs e) { //Expresso regular que aceita somente nmeros inteiros string numero = @"^\d+$"; //ou string numero2 = @"^[0-9]+$";
Label1.Text = "Nmero inteiro invlido. "; if (match.Success) { Label1.Text = "Nmero inteiro vlido. "; }
//Expresso regular que aceita nmeros reais string numeroReal = @"^\d+?(.|,\d+)$"; //ou string numeroReal2 = @"^[0-9]+?(.|,[0-9]+)$";
6 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
//Expressao regular que valida email string email = @"^([\w\-]+\.)*[\w\- ]+@([\w\- ]+\.)+([\w\-]{2,3})$"; match = Regex.Match("werison.faw@gmail.com", email);
if (match.Success) { Label1.Text += "Email vlido. "; } else { Label1.Text += "Email invlido. "; }
//Expresso regular que valida telefone string telefone = @"^\d{2}-\d{4}-\d{4}$"; //ou string telefone2 = @"^[0-9]{2}-[0-9]{4}-[0-9]{4}$"; match = Regex.Match("14-1234-4567", telefone2);
if (match.Success) { Label1.Text += "Telefone vlido. "; } else { Label1.Text += "Telefone invlido. "; }
7 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
if (match.Success) { Label1.Text += "CPF vlido. "; } else { Label1.Text += "CPF invlido. "; }
//Expressao regular que valida cnpj string cnpj = @"^\d{3}.?\d{3}.?\d{3}/?\d{3}-?\d{2}$"; match = Regex.Match("111.111.111/111-11", cnpj);
if (match.Success) { Label1.Text += "CNPJ vlido. "; } else { Label1.Text += "CNPJ invlido. "; }
//Expressao regular que valida data string data = @"^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$"; match = Regex.Match("01/01/2000", data);
8 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
//Expressao regular que valida cep string cep = @"^\d{5}\-?\d{3}$"; match = Regex.Match("09740-001", cep);
if (match.Success) { Label1.Text += "CEP vlido. "; } else { Label1.Text += "Cep invlido. "; }
//Expressao regular que valida url string url = @"^((http)|(https)|(ftp)):\/\/([\- \w]+\.)+\w{2,3}(\/ [%\-\w]+(\.\w{2,})?)*$"; match = Regex.Match("http://neocanvas.aspbrasil.net", url);
if (match.Success) { Label1.Text += "URL vlida. "; } else { Label1.Text += "URL invlida. "; }
if (match.Success) {
9 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
//Expressao regular que valida nomes string nome = @"^([\'\.\^\~\\`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\aAzZ]+)+((\s[\'\.\^\~\\`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\aA-zZ]+)+)?$"; //ou string nome2 = @"^[aA-zZ]+((\s[aA-zZ]+)+)?$"; match = Regex.Match("werison aparecido fernandes", nome2);
if (match.Success) { Label1.Text += "Nome vlido. "; } else { Label1.Text += "Nome invlido. "; } }
Antes que voc queira comear a testar o cdigo acima, vamos entender o que faz cada um dos mtodos utilizados, bem como as expresses regulares construdas.
Regex.Match(string input, string pattern); @param = string input: O valor de entrada a ser validado. Exemplo: cep:09841-000. @param= string pattern: A expresso a ser testada. Exemplo: cep: @"^\d{5}\-?\d{3}$". @return= Match: Objeto da classe Match que define um conjunto de mtodos e atributos para a manipulao de expresses regulares.
Regex.Match(string input, string pattern); match.Success @return= bool: Retorna um valor booleano indicando se o teste Match foi bem-sucedido. Exemplo: true.
10 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
^: Indica o comeo da linha. Caso seja omitido esse caractere, ser permitida a entrada de qualquer tipo de caractere no incio da expresso. Exemplo: w\?;.,io12306, nesse caso seria uma expresso vlida. \d+: Permite somente nmeros. A barra invertida escapa o caractere d. Caso seja omitida, significa que estar permitindo sucessivamente vrias ocorrncias da letra d e no nmeros. Exemplo: dddd. +: Permite vrias ocorrncias de um caractere ou pelo menos uma ocorrncia. $: indica o final da linha. Caso seja omitido esse caractere, ser permitida a entrada de qualquer tipo de caractere no final da expresso. Exemplo:12345we.,?/;t, nesse caso seria uma expresso vlida.
A diferena entre a primeira expresso e a segunda a ocorrncia da seqncia de caracteres [0-9]. [0-9]: Tem o mesmo efeito que \d, ou seja, permite apenas nmeros. Nesse caso pode ser informado explicitamente todos os caracteres vlidos na expresso. Exemplo: [0,1,2,3,4,5,6,7,8,9]. Pode ser informado implicitamente como a expresso que estamos estudando [0-9]. O sinal indica a condio de sequncia, onde informado o primeiro e o tlimo caractere da sequncia e o sistema se encarrega de mapear o intervalo.
?: Indica que tudo que estiver depois na expresso opcional. (.|,[0-9]+): Assim como na matemtica os parnteses servem para agrupar expresses. .|,: O pipe na expresso tem o significado do ou lgico, ou seja, tanto o que tiver a direita ou a esquerda da expresso pode ocorrer, sendo uma ocorrncia por vez.
\w: Permite a entrada de qualquer caratere alfanumrico incluindo underscore. \-: Permite a entrada do caractere -. \.: Permite a entrada do caractere .. *: Permite zero ou vrias ocorrncias de tudo que est a esquerda desse caractere na expresso. @: Obriga a ocorrncia desse caractere na expresso. {2,3}: Permite x ocorrncias de tudo que est a esquerda desse conjunto na expresso, onde x o nmero indicado entre {}, nesse caso 2 ou 3.
11 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
0[1-9]: Permite a ocorrncia do caractere 0 seguido de um caratere que pode variar de 1-9. Exemplo: 01, 09. [12]\d: Permite a ocorrncia de do caractere 1 ou 2 [12] seguido de um nmero que pode variar de 0-9. \/: Escapa o caractere barra normal. 1[0-2]): Permite a ocorrncia do caractere 1 seguido dos caracteres 0, 1, 2. Uma ocorrncia por vez. 0[13-9]: Permite a ocorrncia do caractere 0 seguido dos caractes 1 ou 3, ou ainda a sequncia dos caracteres que podem variar de 4-9. Exemplo: 01, 03, 04; 09 so aceitos. Observao 02 no ser aceito.
"([\'\.\^\~\\`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\aA-zZ]+): Permite a ocorrncia de todas as letras do alfabeto em caixa alta e em caixa baixa (aA-zZ). Os demais caracteres na expresso causam a excesso, que neste caso se faz necessrio porque a expresso (aA-zZ), no permite caracteres acentuados.
12 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
Agora que j entendemos o funcionamento de cada uma das expresses apresentadas, vamos testar nossa aplicao. Voc pode ainda entrar com novos valores, para testar novas situaes ainda no testar. Rode a aplicao e veja os resultados. Observe se voc obteve os mesmos resultados apresentados na figura abaixo.
Espero que vocs tenham gostado desse artigo. Um grande abrao a todos e at a prxima.
Referncias Bibliogrficas
[DEITEL P., DEITEL J. 2006] DEITEL P., DEITEL J. C# Como Programar. So Paulo: Editora Person Makron books,
13 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
Curtir
Gostei (3)
(0)
2 COMENTRIOS
Juan Gonzales Torres formatao [h +1 ano] - Responder
[autor] Werison Aparecido Fernandes Eu vou corrgi-la assim que possvel. Obrigado. [h +1 ano] - Responder
+.net
Publicidade
Servios
Inclua um comentrio Adicionar aos Favoritos Marcar como lido/assistido Incluir anotao pessoal Verso para impresso
14 de 15
24/09/2013 12:40
http://www.devmedia.com.br/validando-formularios-usando-regular-e...
DevMedia
Curtir 13.699 pessoas curtiram DevMedia. DevMedia | Anuncie | Fale conosco Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03
Pl i i ld F b k
15 de 15
24/09/2013 12:40