Aprenda como validar dados com PHP
No post de hoje vou demonstrar como validar dados com PHP, serão diversos exemplos com validações simples como verificar o data type de um valor até funções mais complexas para validar documentos.
O objetivo desse post não é “reinventar a roda”, não vou desenvolver funções do zero pois já existem diversas espalhadas pela WEB, inclusive o próprio PHP já fornece muitas funções nativas, minha intenção é que esse post seja um ponto central para consultar as mais variadas funções e REGEX para validações.
Validar dados com PHP
- Valida se é do tipo Array()
- Valida se é do tipo String
- Valida se é do tipo Integer
- Valida o formato do E-mail
- Valida o CPF
- Valida o CNPJ
- Valida o formato da Data
- Valida a extensão do Arquivo
- Valida o CEP
- Valida formato do número de Telefone
Tipo Array
O PHP possui várias funções nativas para validações de tipo, entre elas temos “is_array()”, essa função retorna TRUE ou FALSE na verificação se o valor passado como parâmetro é um “ARRAY”.
Importante citar que estamos validando a estrutura e não está sendo verificado os valores de cada elemento do Array():
1 2 3 4 5 6 7 8 9 |
$valor = array('nome' => 'William'); if(is_array($valor)): echo 'É um Array.'; else: echo 'Não é um Array.'; endif; // Saída É um Array |
Tipo String
Podemos usar outra função nativa do PHP “is_string()” para validar se o valor passado como parâmetro é do tipo “STRING”, o retorno é booleano (TRUE ou FALSE), essa é fácil identificar porque o valor está delimitado com apóstrofos:
1 2 3 4 5 6 7 8 9 |
$valor = 'William123'; if(is_string($valor)): echo 'É do tipo String.'; else: echo 'Não é do tipo String.'; endif; // Saída É do tipo String |
Tipo Integer
Mais uma função nativa “is_integer()”, essa função valida se o valor passado como parâmetro é do tipo “INTEGER” e retorno TRUE ou FALSE:
1 2 3 4 5 6 7 8 9 |
$valor = 2016; if(is_integer($valor)): echo 'É do tipo Integer.'; else: echo 'Não é do tipo Integer.'; endif; // Saída É do tipo Integer |
Um detalhe importante, se for passado como parâmetro uma variável com valores delimitados por apóstrofo ou aspas, o retorno da função “is_integer()” será FALSE:
1 2 3 4 5 6 7 8 9 |
$valor = '2016'; if(is_integer($valor)): echo 'É do tipo Integer.'; else: echo 'Não é do tipo Integer.'; endif; // Saída Não é do tipo Integer |
Formato de E-mail
Mais uma vez o PHP nos ajuda com filters, fornecendo diversos tipos de validação e para validar e-mails existe uma opção “FILTER_VALIDATE_EMAIL
” que retorna TRUE ou FALSE:
1 2 3 4 5 6 7 8 9 |
$valor = 'wllfl@ig.com.br'; if(filter_var($valor, FILTER_VALIDATE_EMAIL)): echo 'E-mail válido.'; else: echo 'E-mail inválido.'; endif; // Saída E-mail válido |
Se o leitor preferir uma rotina usando REGEX para validar e-mail, segue abaixo uma opção:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function isEmailValido($email){ $conta = "/[a-zA-Z0-9\._-]+@"; $domino = "[a-zA-Z0-9\._-]+."; $extensao = "([a-zA-Z]{2,4})$/"; $pattern = $conta.$domino.$extensao; if (preg_match($pattern, $email)) return true; else return false; } $valor = 'wllfl@ig.com.br'; if(isEmailValido($valor)): echo 'E-mail válido.'; else: echo 'E-mail inválido.'; endif; // Saída E-mail válido |
Validar CPF
Essa função para validar CPF coletei na internet já tem um tempo, mas infelizmente não me lembro o nome do autor para dar os créditos, basicamente recebe o CPF como parâmetro e retorna TRUE ou FALSE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
function isCPFValido($valor){ $valor = str_replace(array('.','-','/'), "", $valor); $cpf = str_pad(preg_replace('[^0-9]', '', $valor), 11, '0', STR_PAD_LEFT); if (strlen($cpf) != 11 || $cpf == '00000000000' || $cpf == '11111111111' || $cpf == '22222222222' || $cpf == '33333333333' || $cpf == '44444444444' || $cpf == '55555555555' || $cpf == '66666666666' || $cpf == '77777777777' || $cpf == '88888888888' || $cpf == '99999999999'): return false; else: for ($t = 9; $t < 11; $t++): for ($d = 0, $c = 0; $c < $t; $c++) : $d += $cpf{$c} * (($t + 1) - $c); endfor; $d = ((10 * $d) % 11) % 10; if ($cpf{$c} != $d): return false; endif; endfor; return true; endif; } $valor = '34291199287'; if(isCPFValido($valor)): echo 'CPF válido.'; else: echo 'CPF inválido.'; endif; // Saída CPF válido |
Validar CNPJ
Abaixo tem outra função que peguei na internet mas também não tenho o nome do autor, essa função valida se o CNPJ é válido e retorna TRUE ou FALSE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
function isCNPJValido($valor){ $cnpj = str_pad(str_replace(array('.','-','/'),'',$valor),14,'0',STR_PAD_LEFT); if (strlen($cnpj) != 14): return false; else: for($t = 12; $t < 14; $t++): for($d = 0, $p = $t - 7, $c = 0; $c < $t; $c++): $d += $cnpj{$c} * $p; $p = ($p < 3) ? 9 : --$p; endfor; $d = ((10 * $d) % 11) % 10; if($cnpj{$c} != $d): return false; endif; endfor; return true; endif; } $valor = '36172186000103'; if(isCNPJValido($valor)): echo 'CNPJ válido.'; else: echo 'CNPJ inválido.'; endif; // Saída CNPJ válido |
Validar Data
Para validar se o formato de uma data está correto o PHP fornece a função “checkdate()“, ela recebe 3 parâmetros (mes, dia, ano), para usar é necessário apenas executar a função “explode” para separar os valores de uma data enviada pelo usuário:
1 2 3 4 5 6 7 8 9 10 |
$valor = '25/12/2016'; $arraData = explode('/', $valor); if(checkdate($arraData[1], $arraData[0], $arraData[2])): echo 'Data válida.'; else: echo 'Data inválida.'; endif; // Saída Data válida |
Validar Extensão de Arquivo
Quando estamos trabalhando com upload de imagens no PHP, recebemos após uma submissão de formulário a variável “$_FILES[]” que contém todos os dados do arquivo enviado pelo upload.
É sempre uma boa prática validar se a extensão desse arquivo é aceita, pois formulários de upload acabam sendo um porta para invasões, a rotina abaixo ajuda nessa validação:
1 2 3 4 5 6 7 8 9 |
$extensoes_aceitas = array('bmp' ,'png', 'svg', 'jpeg', 'jpg'); $array_extensoes = explode('.', $_FILES['foto']['name']); $extensao = strtolower(end($array_extensoes)); if (array_search($extensao, $extensoes_aceitas) === false): echo 'Extensão válida'; else: echo 'Extensão inválida'; endif; |
Validar o CEP
Validação de CEP é sempre complicado, o que podemos fazer para reduzir erros é validar a estrutura do CEP usando um REGEX, sugiro colocar uma máscara com JavaScript no front-end assim evita que os usuários digitem sujeiras no campo CEP:
1 2 3 4 5 6 7 8 9 |
$valor = '18135-690'; if (preg_match('/[0-9]{5,5}([-]?[0-9]{3})?$/', $valor)): echo 'CEP válido'; else: echo 'CEP inválido'; endif; // Saída CEP válido |
Validar número de Telefone
Validação de telefone principalmente número de celular se tornou outra dor de cabeça depois que adicionaram mais um dígito, porém essa alteração não vale para todos os estados então sempre fica a dúvida de aceitar ou não esse dígito.
Uma saída é usar um REGEX que aceite os 2 formatos, número de celular com com 9 dígitos e com 8 dígitos:
1 2 3 4 5 6 7 8 9 |
$valor = '(99) 99999-9999'; if (preg_match('/^\([0-9]{2}\)?\s?[0-9]{4,5}-[0-9]{4}$/', $valor)): echo 'Fone válido'; else: echo 'Fone inválido'; endif; // Saída Fone válido |
Chegando ao fim de mais um post, postei vários exemplos de como validar dados com PHP, caso surgirem mais algumas rotinas irei acrescentando, se o leitor tiver uma sugestão pode deixar na seção de comentários.
Espero que tenham gostado, até a próxima