Você está na página 1de 15

Validando Formulrios Usando Regular Expression

http://www.devmedia.com.br/validando-formularios-usando-regular-e...

Tecnologias

Revistas

Cursos LOGIN:

Pocket videos

DevWare SENHA:

Frum

Servios

Publicar

Comprar

Bem vindo a DevMedia!

Esqueci minha senha

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.

Visual Studio 2005/2008 ou Visual Web Developer 2005/2008.

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

Validando Formulrios Usando Regular Expression

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)

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

[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

Validando Formulrios Usando Regular Expression

http://www.devmedia.com.br/validando-formularios-usando-regular-e...

\w

Encontra qualquer caractere alfanumrico incluindo underscore. Equivalente a [a-zA-Z0-9_].

\W

Encontra qualquer caractere que no se encontra na classe dos alfanumricos. 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,}.

Alternao & Agrupamento Smbolo Descrio

()

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

( )\n

Encontra uma clusula entre parnteses. n o nmero de clusulas para a esquerda da backReference.

3 de 15

24/09/2013 12:40

Validando Formulrios Usando Regular Expression

http://www.devmedia.com.br/validando-formularios-usando-regular-e...

Conhecendo o Espao de Nomes System.Text.RegularExpressions

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

Validando Formulrios Usando Regular Expression

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

Validando Formulrios Usando Regular Expression

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>

Cdigo exemplo: listagem_01

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]+$";

Match match = Regex.Match("10", numero2);

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]+)$";

match = Regex.Match("10.456", numeroReal2);

if (match.Success) { Label1.Text += "Nmero real vlido. "; }

6 de 15

24/09/2013 12:40

Validando Formulrios Usando Regular Expression


else { Label1.Text += "Nmero real invlido. "; }

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. "; }

//Expressao regular que valida cpf string cpf = @"^\d{3}\.?\d{3}\.?\d{3}\-?\d{2}$";

7 de 15

24/09/2013 12:40

Validando Formulrios Usando Regular Expression


match = Regex.Match("111.111.111-11", cpf);

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);

if (match.Success) { Label1.Text += "Data vlida. "; } else { Label1.Text += "Data invlida.

8 de 15

24/09/2013 12:40

Validando Formulrios Usando Regular Expression


"; }

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. "; }

//Expressao regular que valida ip string ip = @"^\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b$"; match = Regex.Match("127.0.0.0", ip);

if (match.Success) {

9 de 15

24/09/2013 12:40

Validando Formulrios Usando Regular Expression


Label1.Text += "IP vlido. "; } else { Label1.Text += "IP invlido. "; }

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

Validando Formulrios Usando Regular Expression


Entendendo as Expresses Regulares

http://www.devmedia.com.br/validando-formularios-usando-regular-e...

string numero = @"^\d+$"

^: 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.

//ou string numero2 = @"^[0-9]+$"

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.

string numeroReal = @"^\d+?(.|,\d+)$" //ou string numeroReal2 = @"^[0-9]+?(.|,[0-9]+)$"

?: 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.

string email = @"^([\w\-]+\.)*[\w\- ]+@([\w\- ]+\.)+([\w\-]{2,3})$"

\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.

string telefone = @"^\d{2}-\d{4}-\d{4}$";

11 de 15

24/09/2013 12:40

Validando Formulrios Usando Regular Expression


//ou string telefone2 = @"^[0-9]{2}-[0-9]{4}-[0-9]{4}$";

http://www.devmedia.com.br/validando-formularios-usando-regular-e...

No h nada diferente do que j foi explicado anteriormente.

string cpf = @"^\d{3}\.?\d{3}\.?\d{3}\-?\d{2}$";

No h nada diferente do que j foi explicado anteriormente.

string cnpj = @"^\d{3}.?\d{3}.?\d{3}/?\d{3}-?\d{2}$";

No h nada diferente do que j foi explicado anteriormente.

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}$";

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.

string cep = @"^\d{5}\-?\d{3}$";

No h nada diferente do que j foi explicado anteriormente.

string url = @"^((http)|(https)|(ftp)):\/\/([\- \w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*$";

No h nada diferente do que j foi explicado anteriormente.

string nome = "^([\'\.\^\~\\`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\aA-zZ]+)+ ((\s[\'\.\^\~\\`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\aA-zZ]+)+)?$"; //ou string nome2 = @"^[aA-zZ]+((\s[aA-zZ]+)+)?$"

"([\'\.\^\~\\`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\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

Validando Formulrios Usando Regular Expression


\s: Permite o caractere espao na expresso.

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

Validando Formulrios Usando Regular Expression


2006. P. 572

http://www.devmedia.com.br/validando-formularios-usando-regular-e...

[WIKIPEDIA] WIKIPEDIA, http://pt.wikipedia.org/wiki/Express%C3%A3o_regular, acessado em 04/03/2009.

Werison Aparecido Fernandes


Sou Analista de Sistemas, formado em Cincia da Computao. Trabalho a mais de dois anos com AspNet. Anteriormente trabalhei com as tecnologias Java e PHP. Email: werison.faw@gmail.com

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

Validando Formulrios Usando Regular Expression

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