<?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; regex</title>
	<atom:link href="http://www.codigocomcafe.com/category/regex/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codigocomcafe.com</link>
	<description>Programação e assuntos relacionados. Com café.</description>
	<lastBuildDate>Sun, 11 Jul 2010 00:42:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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 futuro [...]]]></description>
			<content:encoded><![CDATA[<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>
]]></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>
