<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Código com Café &#187; javascript</title>
	<atom:link href="http://www.codigocomcafe.com/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codigocomcafe.com</link>
	<description>Programação e assuntos relacionados. Com café.</description>
	<lastBuildDate>Tue, 19 Jul 2011 14:13:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>How jQuery Works (tradução do tutorial para pt-BR)</title>
		<link>http://www.codigocomcafe.com/2009/08/how-jquery-works-traducao-do-tutorial-para-pt-br/</link>
		<comments>http://www.codigocomcafe.com/2009/08/how-jquery-works-traducao-do-tutorial-para-pt-br/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 11:00:19 +0000</pubDate>
		<dc:creator>George Marques</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.codigocomcafe.com/?p=86</guid>
		<description><![CDATA[Apenas uma tradução para português do Brasil do tutorial de jQuery presente em http://docs.jquery.com/How_jQuery_Works. Por ser praticamente um &#8220;getting started&#8221; oficial e não encontrei nenhuma versão deste texto em português, resolvi traduzi-lo eu mesmo. Se por acaso encontrar algum &#8220;eu&#8221; no texto, se refere ao autor original (John Resig.). jQuery: O Básico Este é um [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><div style="text-align:justify;">
<p>Apenas uma tradução para português do Brasil do tutorial de jQuery presente em <a href="http://docs.jquery.com/How_jQuery_Works">http://docs.jquery.com/How_jQuery_Works</a>. Por ser praticamente um &#8220;getting started&#8221; oficial e não encontrei nenhuma versão deste texto em português, resolvi traduzi-lo eu mesmo. Se por acaso encontrar algum &#8220;eu&#8221; no texto, se refere ao autor original (<a title="http://ejohn.org/" href="http://ejohn.org/">John Resig.</a>).</p>
<p><span id="more-86"></span></p>
<h2><a name="Basico">jQuery: O Básico</a></h2>
<p>Este é um tutorial básico, desenvolvido para ajudá-lo a começar a usar o jQuery. Se você ainda não tem uma página de teste pronta, comece criando uma nova página HTML com o seguinte conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;html&gt;
  &lt;head&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;jquery.js&quot;&gt;&lt;/script&gt;
&nbsp;
    &lt;script type=&quot;text/javascript&quot;&gt;
&nbsp;
    &lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;a href=&quot;http://www.codigocomcafe.com/&quot;&gt;Código com Café&lt;/a&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>Altere o atributo <code>src</code> da <i>tag</i> <code>script</code> para que aponte para a sua cópia do jquery.js. Por exemplo, se jquery.js estiver no mesmo diretório que se arquivo HTML, você pode usar:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.js&quot;&gt;&lt;/script&gt;</pre></div></div>

<p><strong>Nota:</strong> Quando a página inteira é incluída através das funções include() ou require() do PHP, tenha certeza de colocar o script dentro da tag &lt;body&gt; e não dentro de &lt;head&gt;, porque chamando o arquivo de script do jQuery dentro da tag &lt;head&gt; por algum motivo não funciona.</p>
<p>Você pode baixar sua própria cópia do jQuery na página <a href="http://docs.jquery.com/Downloading_jQuery" title="Downloading jQuery">Downloading jQuery</a>.</p>
<h2><a name="Quando_Pronto">Lançando o código quando o documento estiver pronto</a></h2>
<p>A primeira coisa que a maioria dos programadores de JavaScript acaba fazendo é adicionar algum código ao programa, parecido com isto:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">window.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;bem-vindo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Dentro disso fica o código que você quer que rode exatamente quando a página for carregada. Problematicamente, contudo, o código JavaScript não roda até que todas as imagens forem baixadas (isto inclui os banners de propaganda). O motivo para usar <code>window.onload</code> em primeiro lugar é que o &#8216;document&#8217; do HTML ainda não está completamente carregado, quando você tenta rodar seu código pela primeira vez.</p>
<p>Para burlar ambos os problemas, jQuery tem uma instrução simples que checa o documento e espera até que ele esteja pronto para ser manipulado, conhecido como o <a href="http://docs.jquery.com/Events#ready.28_fn_.29">evento <em>ready</em></a></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"> $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #006600; font-style: italic;">// Seu codigo aqui (com ou sem cafe)</span>
 <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Dentro do evento <em>ready</em>, insira um manipulador do evento click para o link:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"> $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Obrigado por visitar&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Salve seu arquivo HTML e recarregue a página de testes em seu navegador. Clicando no link na página deve aparecer uma caixa de mensagem no navegador, antes de deixar a página para ir até a página principal do Código com Café.</p>
<p>Para <em>click</em> e muitos outro <a href="http://docs.jquery.com/Events">eventos</a>, você pode previnir o comportamento principal &#8211; aqui o link até www.codigocomcafe.com &#8211; chamando <code>event.preventDefault()</code> no manipulador do evento:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"> $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Como pode ver, o link não te leva mais para www.codigocomcafe.com&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     event.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h2><a name="Exemplo_Completo">Exemplo Completo</a></h2>
<p>O seguinte é um exemplo de como o arquivo HTML completo deve parecer se você usou o script em seu próprio aquivo. Note que ele aponta para o CDN do Google para carregar o arquivo do jQuery. Também, enquanto o script personalizado foi colocado dentro da tag &lt;head&gt;, em geral é preferível que se coloque em um arquivo separado e se referir a este arquivo no atributo src do elemento script.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"> &lt;!DOCTYPE html&gt;
 &lt;html lang=&quot;en&quot;&gt;
 &lt;head&gt;
   &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;
   &lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
   <span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
     $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
       $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
         <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Como pode ver, o link não te leva mais para www.codigocomcafe.com&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         event.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
 &lt;/head&gt;
 &lt;body&gt;
   &lt;a href=&quot;http://www.codigcomcafe.com/&quot;&gt;Código com Café&lt;/a&gt;
 &lt;/body&gt;
 &lt;/html&gt;</pre></td></tr></table></div>

<h2><a name="Adicionando_CSS">Adicionando e Removendo uma Classe CSS</a></h2>
<p><strong>Importante:</strong> <em>Os exemplos em jQuery daqui pra frente precisarão ser colocados dentro do <a href="http://docs.jquery.com/Events#ready.28_fn_.29">evento <em>ready</em></a>, assim eles serão executados quando o documento estiver pronto para se trabalhar. Veja <a href="#Quando_Pronto">Lançando o código quando o documento estiver pronto</a> acima para detalhes.</em></p>
<p>Outra tarefa comum é adicionar (ou remover) uma classe CSS.</p>
<p>Primeiro, adicione uma alguma informação de estilo dentro de &lt;head&gt; do seu documento, como isto:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"> &lt;style type<span style="color: #00AA00;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span><span style="color: #00AA00;">&gt;</span>
    a<span style="color: #6666ff;">.teste</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">bold</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
 &lt;/style<span style="color: #00AA00;">&gt;</span></pre></div></div>

<p>Em seguida, adicione a chamada <a href="http://docs.jquery.com/Attributes/addClass"><code>addClass</code></a> ao seu script:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;teste&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Todos os seus elementos <code>a</code> ficarão em negrito.</p>
<p>Para remover uma classe, use <code>removeClass</code></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;teste&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<ul>
<li>(CSS permite que múltiplas classes sejam adicionadas a um elemento)</li>
</ul>
<h2><a name="Efeitos_Especiais">Efeitos Especiais</a></h2>
<p>Em jQuery, são providos alguns <a href="http://docs.jquery.com/Effects">efeitos</a> úteis, para realmente fazer o sew website se sobressair. Para colocar isso em teste, altere o click que você adicionou previamente para isto:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   event.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Agora, se você clicar em algum link, isto deve fazê-lo sumir vagarosamente.</p>
<h2><a name="Callback">FUNÇÕES E CALLBACK</a></h2>
<p><em>Callback</em> é uma função passada como argumento para outra função e é executada quando sua função-mãe for completada. A coisa especial sobre callback é que a função que aparece depois da &#8220;mãe&#8221; pode executar antes que o callback execute.</p>
<p>Outra coisa importante é saber como passar apropriadamente o callback. Isto é onde muitas vezes eu esqueci da sintaxe apropriada.</p>
<h2><a name="Callback_sem_Argumentos">Callback <em>sem</em> argumentos</a></h2>
<p>Para um callback sem argumentos, você passa como este:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'minhapagina.html'</span><span style="color: #339933;">,</span> meuCallBack<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Note</strong> que o segundo parâmetro aqui é simplesmente o nome da função (mas <em>não</em> como uma <code>string</code> e sem parênteses). Funções em JavaScript são &#8216;Cidadãos de primeira classe&#8217; e assim devem ser passadas como referências de variáveis e executadas num momento mais tarde.</p>
<h2><a name="Callback_com_Argumentos">Callback <em>com</em> argumentos</a></h2>
<p>&#8220;O que se faz quando tiver argumentos que deseja passar?&#8221;, você pode perguntar a si mesmo.</p>
<h3>Errado</h3>
<p>A Forma Errada (<strong>Não</strong> irá funcionar!)</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"> $.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'minhapagina.html'</span><span style="color: #339933;">,</span> meuCallBack<span style="color: #009900;">&#40;</span>param1<span style="color: #339933;">,</span> param2<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Não funciona porque isso chama</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">meuCallBack<span style="color: #009900;">&#40;</span>param1<span style="color: #339933;">,</span> param2<span style="color: #009900;">&#41;</span></pre></div></div>

<p>e então passa o valor retornado como segundo parâmetro para <a href="http://docs.jquery.com/Ajax">$.get()</a>.</p>
<h3>Certo</h3>
<p>O problema com o exemplo acima é que <code>meuCallBack(param1, param2)</code> é avaliado antes de ser passado como uma função. JavaScript e por extensão o jQuery espera um ponteiro em casos como esse. Por exemplo, a função setTime</p>
<p>Na utilização abaixo, uma função anônima é criada (apenas um bloco de instruções) e então registrada como a função callback. Note o uso de &#8216;function(){&#8216;. A função anônima faz exatamente uma coisa: chama meuCallBack, com os valores de param1 e param2 no escopo exterior.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'minhapagina.html'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  meuCallBack<span style="color: #009900;">&#40;</span>param1<span style="color: #339933;">,</span> param2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>param1 e param2 são avaliados como um callback assim que $.get() terminar de obter a página.</p>
<h2><a name="Mais_Leituras">MAIS LEITURAS</a></h2>
<p>Encerrando por aqui a tradução, mantenho a indicação original para os <a href="http://docs.jquery.com/Tutorials">tutoriais</a> e para a <a href="http://docs.jquery.com/Main_Page">Documentação do jQuery</a>.</p>
<p>Comecei agora a estudar jQuery e pretendo postar as funções que achar interessantes (ou úteis). É um pouco difícil encontrar conteúdo em português, então por esse motivo pretendo postar algumas coisas aqui. E dizem que o <a href="http://www.livrojquery.com.br/">livro do Maujor</a> é muito bom.</p>
</div>
<div class="shr-publisher-86"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.codigocomcafe.com%2F2009%2F08%2Fhow-jquery-works-traducao-do-tutorial-para-pt-br%2F' data-shr_title='How+jQuery+Works+%28tradu%C3%A7%C3%A3o+do+tutorial+para+pt-BR%29'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.codigocomcafe.com%2F2009%2F08%2Fhow-jquery-works-traducao-do-tutorial-para-pt-br%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.codigocomcafe.com%2F2009%2F08%2Fhow-jquery-works-traducao-do-tutorial-para-pt-br%2F' data-shr_title='How+jQuery+Works+%28tradu%C3%A7%C3%A3o+do+tutorial+para+pt-BR%29'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.codigocomcafe.com%2F2009%2F08%2Fhow-jquery-works-traducao-do-tutorial-para-pt-br%2F' data-shr_title='How+jQuery+Works+%28tradu%C3%A7%C3%A3o+do+tutorial+para+pt-BR%29'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.codigocomcafe.com/2009/08/how-jquery-works-traducao-do-tutorial-para-pt-br/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Validando datas com JavaScript e Expressões Regulares</title>
		<link>http://www.codigocomcafe.com/2009/08/validando-datas-com-javascript-e-regex/</link>
		<comments>http://www.codigocomcafe.com/2009/08/validando-datas-com-javascript-e-regex/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 16:37:00 +0000</pubDate>
		<dc:creator>George Marques</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://www.codigocomcafe.com/index.php/2009/08/15/validando-datas-com-javascript-e-expressoes-regulares/</guid>
		<description><![CDATA[Expressões Regulares, conhecidas também como regex, são muito úteis na área de programação. Uma das utilidades das ERs é a validação de dados. Estava estudando ERs e, para treinar, decidi fazer um sistema de validação de datas em JavaScript, algo bastante útil, embora já existam funções prontas que fazem isso, como no jQuery, talvez no [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Expressões Regulares, conhecidas também como <span style="font-style: italic;">regex</span>, são muito úteis na área de programação. Uma das utilidades das ERs é a validação de dados.</p>
<p>Estava estudando ERs e, para treinar, decidi fazer um sistema de validação de datas em JavaScript, algo bastante útil, embora já existam funções prontas que fazem isso, como no jQuery, talvez no futuro eu cite algumas dessas funções.</p>
<p>Validar datas com ERs é útil porque elas são aceitas em várias linguagens diferentes, assim o seu script em PHP (ou outra linguagem de servidor) pode validar novamente os dados, por segurança, usando a mesma ER. Você não precisará se dar ao trabalho de escrever um novo código.</p>
<p><span id="more-5"></span></p>
<p>Existem duas maneiras de se definir uma ER em JavaScript:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #009966; font-style: italic;">/regex/</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//ou</span>
<span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;regex&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Sempre tomando cuidado para escapar os caracteres corretamente.</p>
<h4 style="font-weight: bold;font-size:130%;">Validando Datas</h4>
<p>Vamos ao que interessa. Em primeiro lugar vamos definir uma ER genérica, depois vamos melhorando-a até chegar naquilo que queremos (preste atenção no escape do caractere &#8216;<code>/</code>&#8216;).</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #009966; font-style: italic;">/..\/..\/..../</span><span style="color: #339933;">;</span></pre></div></div>

<p>Isso reconhece  qualquer coisa, como &#8220;e3/34/e %[&#8220;, e isso não é o que queremos. Vamos limitar apenas a números (<code>\d</code>). Além disso, a data deve ser a única coisa no campo, então vamos dizer que é no começo da linha (<code>^</code>) e que também é no final da linha (<code>$</code>).</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #009966; font-style: italic;">/^\d\d\/\d\d\/\d\d\d\d$/</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ok. Mas isso aceitaria algo como &#8220;43/56/9999&#8243;, temos que limitar o dia até 31 e o mês até 12. E nenhum dos dois pode ser &#8220;00&#8243;. Então o dia deve ser 0 e um número entre 1 e 9, 1 ou 2 e um número ou 3 e 0 ou 1. Algo parecido para o mês. O ano deve ser entre 1900 e 2099. Vamos agrupar cada pedaço, para ficar mais fácil (ou não).</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #009966; font-style: italic;">/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/((19|20)\d\d)$/</span><span style="color: #339933;">;</span></pre></div></div>

<p>Bom, o dia pode possuir apenas um dígito se estiver entre 1 e 9. O mesmo vale para o mês. O ano também pode ser no formato reduzido de apenas dois dígitos. Vamos deixar algumas coisas opcionais (<code>?</code>).</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #009966; font-style: italic;">/^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[0-2])\/((19|20)?\d\d)$/</span><span style="color: #339933;">;</span></pre></div></div>

<p>Está ficando bonito, não é? Agora vem o problema. Uma data do tipo &#8220;31/4/09&#8243; é válida, mas abril não tem dia 31. Teremos que dividir por mês, permitindo a quantidade de dias apropriada. Existem basicamente dois jeitos de se fazer isso. O primeiro é mantendo o intervalo de dias inteiro para cada tipo de mês (29, 30 ou 31 dias). Outro modo seria permitir 28 dias para todos os meses, 29 e 30 para todos menos fevereiro e 31 para os meses de 31 dias. Vou usar essa segunda maneira, porque deixa a ER menor e mais fácil de entender (às vezes uma maior é mais fácil de entender, nesse caso deixe ela maior). O agrupamento é importante, pois o operador OU (<code>|</code>) é o último da lista de precedência.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #339933;">/^</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">-</span><span style="color: #CC0000;">9</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span>\d<span style="color: #339933;">|</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">-</span><span style="color: #CC0000;">8</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">-</span><span style="color: #CC0000;">9</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">-</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span>
 <span style="color: #006600; font-style: italic;">//28 para todos os meses</span>
<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">29</span><span style="color: #339933;">|</span><span style="color: #CC0000;">30</span><span style="color: #009900;">&#41;</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">13456789</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">-</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span>
 <span style="color: #006600; font-style: italic;">//29 e 30 para todos menos fevereiro</span>
<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">31</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">13578</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#91;</span>02<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #006600; font-style: italic;">//31 para jan, mar, mai, jul, ago, out e dez</span>
\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">19</span><span style="color: #339933;">|</span><span style="color: #CC0000;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>\d\d<span style="color: #009900;">&#41;</span>$<span style="color: #339933;">/;</span></pre></div></div>

<p>Lembre-se que ERs em JavaScript não aceitam comentários e muito menos quebras de linha,eu só fiz isso para explicar as partes da ER. Se achar que precisará comentar, use o outro formato de definição, quebrando a <code>string</code> passada ao RegExp (nesse caso, lembre-se que a barra inversa &#8216;\&#8217; precisa ser escapada &#8216;\\&#8217;). Nossa ER está quase pronta. O único defeito é que ela não aceita o dia 29 de fevereiro, o que é válido nos anos bissextos. Não podemos deixá-la aceitar o dia 29/2 em todos os anos, então vamos deixar ela do jeito que está e apenas acrescentar uma condição.</p>
<p>Mas essa condição não é exatamente simples. Um ano é bissexto se for divisível por 4. Se termina com 00, o ano é bissexto se for divisível por 400. 2000 é ano bissexto, mas 1900 não é. Um número é divisível por quatro se o número formado pelos dois últimos dígitos for divisível por quatro. Isso só é possível de se fazer com ER porque a tabuada do 4 segue um padrão peculiar. Dos dois dígitos, se o primeiro for par (0 é par) então o segundo deve ser 0, 4 ou 8 e se o primeiro algarismo for ímpar o segundo deve ser 2 ou 6. Com ER, isso ficaria assim:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #009966; font-style: italic;">/\b\d*(([02468])[048])|([13579][26])\b/</span><span style="color: #339933;">;</span></pre></div></div>

<p>Essa é uma ER que casa com qualquer número múltiplo de 4 (de pelo menos dois dígitos). Vamos aplicar o mesmo conceito à nossa ER de validação, lembrando que 1900 é divisível por 4, mas não é bissexto e que 00 é equivalente ao ano 2000.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #339933;">/^</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">-</span><span style="color: #CC0000;">9</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span>\d<span style="color: #339933;">|</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">-</span><span style="color: #CC0000;">8</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">-</span><span style="color: #CC0000;">9</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">-</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span>
 <span style="color: #006600; font-style: italic;">//28 para todos os meses</span>
<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">29</span><span style="color: #339933;">|</span><span style="color: #CC0000;">30</span><span style="color: #009900;">&#41;</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">13456789</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">-</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span>
 <span style="color: #006600; font-style: italic;">//29 e 30 para todos menos fevereiro</span>
<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">31</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">13578</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#91;</span>02<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
 <span style="color: #006600; font-style: italic;">//31 para jan, mar, mai, jul, ago, out e dez</span>
\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">19</span><span style="color: #339933;">|</span><span style="color: #CC0000;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>\d\d<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>$<span style="color: #339933;">|</span>
<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">29</span>\<span style="color: #339933;">/</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #CC0000;">2</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#41;</span>
 <span style="color: #006600; font-style: italic;">//29 de fevereiro</span>
<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">19</span><span style="color: #339933;">|</span><span style="color: #CC0000;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">48</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2468</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>048<span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">13579</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">26</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>00<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>$<span style="color: #339933;">/;</span></pre></div></div>

<p>E, finalmente, nossa ER está pronta. Só falta aplicá-la num código de validação:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> valida_data<span style="color: #009900;">&#40;</span>element<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 regex <span style="color: #339933;">=</span> <span style="color: #339933;">/^</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">-</span><span style="color: #CC0000;">9</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span>\d<span style="color: #339933;">|</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">-</span><span style="color: #CC0000;">8</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">-</span><span style="color: #CC0000;">9</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">-</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">29</span><span style="color: #339933;">|</span><span style="color: #CC0000;">30</span><span style="color: #009900;">&#41;</span>\<span style="color: #339933;">/</span>
        <span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">13456789</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">-</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">31</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">13578</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#91;</span>02<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">19</span><span style="color: #339933;">|</span><span style="color: #CC0000;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>\d\d<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>$<span style="color: #339933;">|</span>
        <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">29</span>\<span style="color: #339933;">/</span><span style="color: #CC0000;">0</span><span style="color: #339933;">?</span><span style="color: #CC0000;">2</span>\<span style="color: #339933;">/</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">19</span><span style="color: #339933;">|</span><span style="color: #CC0000;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">48</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2468</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>048<span style="color: #009900;">&#93;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">13579</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">26</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>00<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>$<span style="color: #339933;">/;</span>
&nbsp;
 resultado <span style="color: #339933;">=</span> regex.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span>element.<span style="color: #660066;">value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>resultado<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   fica_errado<span style="color: #009900;">&#40;</span>element<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
   fica_certo<span style="color: #009900;">&#40;</span>element<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #006600; font-style: italic;">//fim da função</span></pre></div></div>

<p>Sendo que <code>fica_certo()</code> e <code>fica_errado()</code> são funções que avisam o usuário de que a data está válida ou inválida, respectivamente. Essa função pode ser usada no evento <code>onkeyup</code> de um <code>input type=text</code>, por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;input onkeyup=&quot;valida_data(this);&quot; type=&quot;text&quot; /&gt;</pre></div></div>

<p>E pronto! Se quiser, <a href="http://exemplos.codigocomcafe.com/regex-js-date-validator.html">veja um exemplo aqui</a>. Como ERs podem ser aplicadas em várias linguagens de programação, você pode reaproveitá-la, provavelmente mudando apenas os escapes de caracteres. Fica aí a dica.</p>
<div class="shr-publisher-5"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.codigocomcafe.com%2F2009%2F08%2Fvalidando-datas-com-javascript-e-regex%2F' data-shr_title='Validando+datas+com+JavaScript+e+Express%C3%B5es+Regulares'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.codigocomcafe.com%2F2009%2F08%2Fvalidando-datas-com-javascript-e-regex%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.codigocomcafe.com%2F2009%2F08%2Fvalidando-datas-com-javascript-e-regex%2F' data-shr_title='Validando+datas+com+JavaScript+e+Express%C3%B5es+Regulares'></a><a class='shareaholic-tweetbutton' data-shr_count='none' data-shr_href='http%3A%2F%2Fwww.codigocomcafe.com%2F2009%2F08%2Fvalidando-datas-com-javascript-e-regex%2F' data-shr_title='Validando+datas+com+JavaScript+e+Express%C3%B5es+Regulares'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.codigocomcafe.com/2009/08/validando-datas-com-javascript-e-regex/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Object Caching 441/445 objects using disk: basic

Served from: www.codigocomcafe.com @ 2012-02-06 19:22:02 -->
