No CakePHP temos diversas validações que servem para os EUA, porém nenhuma para os padrões brasileiros. Pensando nisso, resolvi fazer um behavior para fazer este tipo de validação. Por enquanto ele só valida CPF, CNPJ, telefone e CEP.
O código está junto do projeto CakePTBR no GitHub(http://github.com/jrbasso/cake_ptbr/tree/master). Eu coloquei ele na forma de plugin, então basta copiar a pasta plugins para dentro do seu projeto (pasta app). Feito isto, ele já está instalado e já pode ser usado nas models.
Nas models, deve ser incluído o behavior e usar a validação normalmente. Exemplo:
class Usuario extends AppModel {
var $name = 'Usuario';
var $actsAs = array('CakeBr.Validacao'); // Aqui inclui o behavior do plugin CakeBr
var $validates = array(
'cpf' => array(
'rule' => 'cpf'
)
);
}
Este exemplo mostra como validar o campo cpf. Mais detalhes de como funciona a validação, veja no CookBook.
Bem, mas afinal, o que será validado?! Vamos detalhar um pouco mais cada uma das quatro funções de validação:
CPF
Se a regra for declarada apenas como cpf (idem exemplo acima), ele irá validar o CPF no formato XXX.XXX.XXX-XX e também fará o teste do dígito verificador (dois últimos números) para verificar se é um CPF válido. Em determinadas situações, deseja-se enviar pro banco apenas os números, sem a formatação, pra isso, coloquei um parâmetro opcional que pode ser passado para fazer este teste. Na rule, deve ser colocado:
var $validates = array(
'cpf' => array(
'rule' => array('cpf', true)
)
);
Deste modo ele irá validar apenas números.
CNPJ
Mesmo funcionamento do CPF, porém para CNPJ. A regra de apenas números também é válida. O formato do CPNJ é considerado XX.XXX.XXX/XXXX-XX.
CEP
O CEP, por padrão, vai ser considerado nos formatos XXXXXXXX ou XXXXX-XXX. Caso queira alterar o separador, você pode definir da seguinte maneira:
var $validates = array(
'cep' => array(
'rule' => array('cep', array('', '-', '.'))
)
);
No exemplo acima, ele vai validar os valores padrões e XXXXX.XXX.
Telefone
A validação do telefone se dará através das formatações:
- XXXX-XXXX
- (XX) XXXX-XXX (o espaço entre o fechamento de parênteses e o número é opcional, mas limitado a 1 espaço)
- +XX (XX) XXXX-XXXX (idem anterior sobre o espaçamento)
Caso deseje validar apenas números, passar o parâmetro true na validação. Neste caso, ele validará números com 8 ou 10 caracteres.
Bem, são estas as validações que fiz por enquanto. Caso alguém tenha uma sugestão de nova validação ou dúvida sobre as apresentadas, fique à vontade para comentar.