Beruflich Dokumente
Kultur Dokumente
s 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 "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)
Tabela dos MetaCaracteres Busca posicionada Smbolo Descrio ^ Busca somente no incio da string. $ Busca somente no fim da string. \b Encontra em qualquer parte da string. \B Encontra qualquer parte que no esteja limitada.
Literais Smbolo Descrio Alfa-numrica Todos os caracteres alfabticos e numerais se encontram literalmente. \\ Encontra o caractere de escape.
Classes de Caracteres Smbolo Descrio 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 [abc] qualquer dgito. Encontra qualquer caractere que no estiver dentro do grupo. O circunflexo indica que nenhum caractere deve estar na string. [^abc] 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. Encontra qualquer caractere alfanumrico incluindo underscore. Equivalente a [a-zA\w Z0-9_]. Encontra qualquer caractere que no se encontra na classe dos alfanumricos. \W Equivalente a [^a-zA-Z0-9_]. \d Encontra qualquer dgito. Equivalente a [0-9]. \D Encontra qualquer caractere que no seja um dgito. Equivalente a [^0-9]. \s Encontra qualquer caractere que equivale a um espao. Equivalente a [ abc]. \S Encontra qualquer caractere que no equivale a um espao. Equivalente a [^abc].
Repetio Smbolo Descrio {x} Encontra exatamente x ocorrncia na expresso regular. {x,} Encontra x ou mais ocorrncias na expresso regular. {x,y} Encontra x para y numero de ocorrncias na expresso regular. ? Encontra zero ou nenhuma ocorrncia. Equivalente a {0,1}. * Encontra zero ou mais ocorrncias. Equivalente a {0,}. + Encontra uma ou mais ocorrncias. Equivalente a {1,}.
() |
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".
BackReferences Smbolo Descrio Encontra uma clusula entre parnteses. n o nmero de clusulas para a esquerda da ( )\n backReference.
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.
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> <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. "; }
if (match.Success) { Label1.Text += "Nmero real vlido. "; } else { Label1.Text += "Nmero real invlido. "; }
//Expressao regular que valida email string email = @"^([\w\-]+\.)*[\w\- ]+@([\w\- ]+\.)+([\w\]{2,3})$"; match = Regex.Match("werison.faw@gmail.com", email);
if (match.Success)
//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);
//Expressao regular que valida cpf string cpf = @"^\d{3}\.?\d{3}\.?\d{3}\-?\d{2}$"; match = Regex.Match("111.111.111-11", cpf);
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[02])|31\/(0[13578]|1[02]))\/\d{4}$"; match = Regex.Match("01/01/2000", data);
//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) { Label1.Text += "IP vlido. "; } else { Label1.Text += "IP invlido. ";
//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.
^: 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.
(.|,[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.
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. \s: Permite o caractere espao na expresso.
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, 2006. P. 572