sexta-feira, 8 de junho de 2012

Validador PHP de Expressões Regulares

 

Olá o assunto hoje é Expressão Regular no PHP.

Talvez você, assim como eu, já quis facilitar seu trabalho de programação na hora de validar um campo, seja ele CPF, CNPJ entre outros. O caminho, via de regra, é "if s intemináveis", aquele monte de comparação, para cada tipo de caracter, etc. Ou aquelas equações cheias de {}[]()/.\/ entre outros símbolos que assustam.
Bom, me assustei bastante, mas continuei, insisti e vi que era legal. Então vou tentar compartilhar um pouco do apreendido com as experiências, e mais, acabei por construir um simples, mas útil Validador de Expressões Regulares. 

Expressão Regular é algo que lhe permite diminuir para uma linha uma dezena de IFs. Pra compreender o que é, existe o  EXCELENTE LIVRO DO AURÉLIO MARINHO gratuito e online. 

O Projeto é bastante simples e consiste de duas páginas php. 

Aqui você pode testá-lo:  Projeto no Ar

Pra executar em modo local, na sua máquina, é necessário ter o PHP e o Apache configurados, e pra quem ainda não tem recomendo o WAMPSERVER, que instala e configura tudo pra você. 

Como editor de texto você pode usar até o bloco de notas, mas existem alguns que lhe facilitam demais a vida. O que costumo usar é o Notepad++ que além de permitir a sintaxe PHP,  também é gratuito. Outra característica muito interessante pra quem faz sites compatíveis com UTF-8 é a opção de  formatar e salvar o arquivo já nesse formato, para que as palavras com acento apareçam corretamente.

Links:

FONTES DO PROJETO

Você já deve ter procurado muito sobre esse assunto na internet, de forma que serei breve e passarei ao código fonte.

Para utilizar, abra o Notepad++, menu Formatar e  marque "Codificação em UTF-8 (sem BOM)", com isso as palavras sairão acentuadas corretamente. Isso é necessário porque estou especificando no < head > esse charset.

Cole o conteúdo do arquivo abaixo e salve-o como INDEX.PHP. Repita para o EXP_REG.PHP.

Salve ambos na pasta www que o WAMPSERVER criou pra você, ela deve estar em: C:\wamp\www\

Agora, entre no seu navegador  e digite: LOCALHOST/INDEX.PHP



Este arquivo é o INDEX.PHP


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta name="title" content="Validador de Expressões Regulares">
  <meta name="description" content="Valida expressões regulares">
  <meta name="keywords" content="validador,expressões regulares,php">
  <meta name="autor" content="Claudio Segura">
  <meta name="revisit-after" content="15">
 
  <style type="text/css">
    #formulario {
        background-color: #61B5D4;
        float:left;
    }   
    #formulario h1{
        font: bold 20px Trebuchet Ms, Verdana, Arial, Tahoma, Sans-Serif;
        color: #426B00;
        text-transform:uppercase;
        text-align: center;
        margin-top: 7px;
    }
   
    #corpo {
        clear:both;
        background-color: #AAAA77;
       
    }
    #corpo h3{
        font: bold 14px Trebuchet Ms, Verdana, Arial, Tahoma, Sans-Serif;
        color: #426B00;
        text-transform:uppercase;   
    }
    #corpo p{
        font: 14px/20px   Arial,Tahoma, Sans-Serif;
        color: #164348;
        margin-botton:0px;    
       
    }
    #exemplo1{
        float:left;   
        margin-left: 20px;   
    }
    #exemplo2{
        float:left;   
        margin-left: 20px;
    }
  </style>
</head>

<body>

    <div id="formulario">
        <table border=1><tr><td>
        <h1>Validador PHP de Experessões Regulares</h1>
        <form method="post" action="exp_reg.php">
           
            <fieldset>
                <p><label><Input type = 'Radio' Name ='tipo' value= 'match'>Preg_match (Encontrar uma coincidência no texto)</label></p>
                <p><label><Input type = 'Radio' Name ='tipo' value= 'replace'>Preg_replace (Encontrar no texto e substituir pelo conteúdo)</label></p>
                Escolha do menu a Expressão Regular
                <select name="dropdown" value="options">
                    <option value="">Digitar uma expressão</option>
                    <option value="(^([\d]|1[0,1,2])/([0-9]|[0,1,2][0-9]|3[0,1])/\d{4}$)">Data</option>
                    <option value="(^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$)">Email</option>
                    <option value="(\b([0-9]{3}\.?){3}\-?[0-9]{2}\b)">CPF</option>
                    <option value="(\b([0-9]{2}\.?)([0-9]{3}\.?){2}\/?([0-9]{4})\-?([0-9]{2})\b)">CNPJ</option>
                    <option value="(\b[0-9]{2}\.?[0-9]{3}-[0-9]{3}\b)">CEP</option>
                </select>
                <p><label>ou digite uma Expressão: <input name="expressao" type="text" size="100"/></label></p>
                <p><label>Conteudo: <input name="conteudo" type="text" size="100"/></label></p>
                <p><label>Texto: <input name="texto" type="text" size="100"/></label>
               
            </fieldset>
           
            <p>

            <input type="submit" value="  Enviar  " name="submit">
            <input type="reset" value="  Limpar  " name="reset">

        </form>
        </td></tr></table>
    </div>
    <div id='corpo'>
        <div id='Exemplo1'>
            <p>Exemplo: preg_replace:</p>
            <h3>Retirar formatação de um CPF ou CNPJ:</h3>
            <p>Selecione: preg_replace</p>
            <p>Expressão: ([\.\-\/\' '])</p>
            <p>Conteúdo: deixe em branco equivale a ' '</p>
            <p>texto:12.234.345/0002-23</p>
            <hr>
            <h3>Formatar CPF:</h3>
            <p>Selecione: preg_replace</p>
            <p>Expressão: (([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{2}))</p>
            <p>Conteúdo: $1.$2.$3-$4</p>
            <p>texto:12234345023</p>
            <hr>
            <h3>Formatar CNPJ:</h3>
            <p>Selecione: preg_replace</p>
            <p>Expressão: (([0-9]{2})([0-9]{3})([0-9]{3})([0-9]{4})([0-9]{2}))</p>
            <p>Conteúdo: $1.$2.$3/$4-$5</p>
            <p>texto:12234345000134</p>
            <hr>
        </div>
        <div id='Exemplo2'>
            <p>exemplo: preg_match:</p>
            <h3>Procurar CPF:</h3>
            <p>Selecione: preg_match</p>
            <p>Expressão: Selecione do menu CPF</p>
            <p>Conteúdo: deixe em branco</p>
            <p>texto:01.234.567-89</p>
            <hr>
            <h3>Procurar CNPJ:</h3>
            <p>Selecione: preg_replace</p>
            <p>Expressão: Selecione do menu CNPJ</p>
            <p>Conteúdo: deixe em branco</p>
            <p>texto:12.234.345/0002-23</p>
            <hr>
               
        </div>
    </div>
   
   
   
</body>
</html>



Este outro é o  EXP_REG.PHP


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta name="title" content="Validador de Expressões Regulares">
  <meta name="description" content="Valida expressões regulares">
  <meta name="keywords" content="validador,expressões regulares,php">
  <meta name="autor" content="Claudio Segura">
  <meta name="revisit-after" content="15">
</head>

<body>

<?php

$expressao=$_POST['dropdown'];

if ($expressao==""){
    $expressao=$_POST['expressao'];
}

$conteudo=$_POST['conteudo'];
$texto=$_POST['texto'];



if ($_POST['tipo']=='match'){
    if (preg_match($expressao,$texto,$resp)){
        echo 'Expressão: '.$expressao;
        echo '<p>';
        echo 'Texto: '.$texto;
        echo '<p>';
        echo 'Resultado: [POSITIVO] - '.$resp[0].' encontrado';
    }else{
        echo 'Resultado: [NEGATIVO] - O texto não apresenta nada como a expressão sugere.';
    }
}else{
    $resp=preg_replace($expressao,$conteudo,$texto);
    echo 'Expressão: '.$expressao;
    echo '<p>';
    echo 'Conteúdo: '.$conteudo;
    echo '<p>';
    echo 'Texto: '.$texto;
    echo '<p>';
    echo 'Resultado: '.$resp;   
   
}

echo "<a href='index.php'>Retornar</a>";

?>

</body>
</html>


Bom então é isso. Bom divertimento.   :)