E aí pessoal, vou começar postando com algo, que acho que é de interesse geral e de suma importância para um código seguro.
** Validação com Expressões Regulares. **
Para início de conversa vamos apresentar aos mais iniciantes, uma função do php que irá nos ajudar muito.
** ereg() == Essa função possui 3 parâmetros, sendo o 3º opcional ==> ereg($expressaoRegular, $string, $matrizExpReg);
... Aqui vamos dar mais ênfase aos 2 primeiros, pois o terceiro é uma matriz gerada por substrings da expressão regular.
... O 1º parâmetro ($expressaoRegular) é a espressão regular a ser usada na validação da string, 2º parâmetro ($string). Ou seja, a string ($string) para ser validada precisa se enquadrar nas condições da expressão regular ($expressaoRegular).
Veja o exemplo:
$nome = Bruno
if (ereg('^[a-zA-Z]{3,50}$',
$nome)){
$sucesso =
"Parabéns você digitou seu nome corretamente".
}else{
$erro =
"Opss.. Seu nome está incorreto!".
}
Explicando:
Na expressão regular acima nós colocamos a seguinte condição:
- Na string $nome só poderá conter letras, tanto minúsculas quanto maiúsculas;
- Além de só poder ter letras, ela deverá ter no mínimo 3 caracteres e no máximo 50.
Para ficar mais fácil:
^ == significa o início da string;
$ == significa o fim da string;
[a-zA-Z] == significa que só pode conter letras, tanto minúsculas quanto maiúsculas;
{3,50} == significa que a string deverá ter no mínimo 3 caracteres e no máximo 50.
Dica:
O PHP tem uma maneira bem fácil de ignorar as letras maiúsculas ou mnúsculas, ou seja se tornar case insensitive. Basta colocar o i diretamente na função. Usando o mesmo exemplo acima ficaria assim:
$nome = Bruno
if (eregi('^[A-Z]{3,50}$',
$nome)){
$sucesso =
"Parabéns você digitou seu nome corretamente".
}else{
$erro =
"Opss.. Seu nome está incorreto!".
}
Observe que trocamos ereg por eregi, e com isso podemos retirar ou a condição de verificação a-z ou a A-z, pois basta uma para ele fazer a verificação, já que não haverá distinção de maiúsculas e minúsculas.
Veja abaixo um exemplo completo e com várias validações:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Expressões Regulares
</title>
</head>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Texto: <input type="text" name="texto" value="<?php echo isset($_POST['texto']) ? $_POST['texto'] : "" ?>">
<input type="submit" value="Aperte o botão !">
</form>
<!--
OBSERVAÇÃO:
* Veja que coloquei -- echo $_SERVER['PHP_SELF']; -- no action do form para o form ser enviado para a mesma página.
* Coloquei também -- echo isset($_POST['texto']) ? $_POST['texto'] : "" -- no value do input para após o post acontecer retornar o valor do próprio post caso ele possua valor ou retorne vazio, caso não tenha valor no post
-->
<?php
$texto =
$_POST['texto'];
if (isset($_POST['texto'])) {
echo "O texto digitado:<br />";
echo "<div><p>";
echo (ereg("a",
$_POST['texto']) ?
"tem ao menos uma letra a minúscula" :
"não tem nenhuma letra a minúscula") .
"<br />";
echo (ereg("^a",
$_POST['texto']) ?
"" :
"não ") .
"inicia com a letra a <br />";
echo (ereg("a$",
$_POST['texto']) ?
"" :
"não ") .
"termina com a letra a<br />";
echo (eregi("php",
$_POST['texto']) ?
"" :
"não ") .
"inicia com as letras php, maiúsculas ou minúsculas<br />";
echo (eregi("^php",
$_POST['texto']) ?
"" :
"não ") .
"inicia com as letras php, maiúsculas ou minúsculas<br />";
echo (ereg("^[0-9]",
$_POST['texto']) ?
"" :
"não ") .
" inicia com um número <br />";
echo (ereg("^[a-g]",
$_POST['texto']) ?
"" :
"não ") .
" inicia com uma letra entre 'a' e 'g' minúscula<br />";
echo (eregi("^[a-g]",
$_POST['texto']) ?
"" :
"não ") .
" inicia com uma letra entre 'a' e 'g' , maiúscula ou minúscula<br />";
echo (ereg("^[a-gA-G]",
$_POST['texto']) ?
"" :
"não ") .
" inicia com uma letra entre 'a' e 'g' , maiúscula ou minúscula<br />";
echo (ereg("^[0-9]$",
$_POST['texto']) ?
"" :
"não ") .
" é um número de 1 dígito apenas<br />";
echo (ereg("^[0-9][0-9]$",
$_POST['texto']) ?
"" :
"não ") .
" é um número de 2 dígitos apenas<br />";
echo (ereg("^[0-9]+$",
$_POST['texto']) ?
"" :
"não ") .
" é um número com pelo menos 1 dígito<br />";
echo (ereg("^[0-9]$",
$_POST['texto']) ?
"" :
"não ") .
" é um número com exatamente 4 dígitos<br />";
echo (ereg("^[0-9a-zA-Z]$",
$_POST['texto']) ?
"" :
"não ") .
" se compõe de exatamente 6 números e letras (não se aceitam símbolos ou pontuações)<br />";
echo "</div></p>";
/*
OBSERVAÇÕES:
* Para os mais iniciantes a expressão:
($condicao ? $retornoVerdadeiro : $retornoFalso);
É uma pequena abreviação de um if().
Exemplo:
if ($condicao){
$retornoVerdadeiro;
}else{
$retornoFalso;
}
O exemplo acima é a mesma coisa que ($condicao ? $retornoVerdadeiro : $retornoFalso);
*/
echo "<div><p>";
echo (ereg("a+b+",
$texto) ?
"" :
"não ").
"tem um ou mais 'a' seguido por um ou mais 'b'<br />";
echo (ereg("a+b*c+",
$texto) ?
"" :
"não ").
"tem um ou mais 'a' seguido por zero ou mais 'b' seguido por um ou mais 'c'<br />";
echo (ereg("a+b?c+",
$texto) ?
"" :
"não ").
"tem um ou mais 'a' seguido por zero ou um 'b' seguido por um ou mais 'c'<br />";
echo (ereg("^a+b?c+",
$texto) ?
"" :
"não ").
"inicia com um ou mais 'a' seguido por zero ou um 'b' seguido por um ou mais 'c'<br />";
echo (ereg("a+bc+$",
$texto) ?
"" :
"não ").
"finaliza com um ou mais 'a' seguido por exatamente três 'b' seguido por um ou mais 'c'<br />";
echo (ereg("^a+b{4,6}c+",
$texto) ?
"" :
"não ").
"inicia com um ou mais 'a' seguido por quatro a seis 'b' seguido por um ou mais 'c'<br />";
echo (ereg("^a+b{3,}c+",
$texto) ?
"" :
"não ").
"inicia com um ou mais 'a' seguido por três ou mais 'b' seguido por um ou mais 'c'<br />";
echo (ereg("^a+(php){3,}c+",
$texto) ?
"" :
"não ").
"inicia com um ou mais 'a' seguido por três ou mais 'php' seguido por um ou mais 'c'<br />";
echo (eregi("^[a-z0-9]+@[a-z0-9]*$",
$texto) ?
"" :
"não ").
"inicia com um ou mais caracteres seguido por um '@' seguido por zero ou mais caracteres<br />";
echo (eregi("^[a-z0-9]+@(php|perl)$",
$texto) ?
"" :
"não ").
"inicia com um ou mais caracteres seguido por um '@' seguido por 'php' ou 'perl'<br />";
echo (eregi("f.w",
$texto) ?
"" :
"não ").
"tem um 'f' seguido por um caracter qualquer seguido por um 'w'<br />";
echo "</div></p>";
}else{
echo "<div><p>";
echo "Digite algo na caixa de texto...";
echo "</div></p>";
}
?>
</body>
</html>
O código acima mostra mais alguns símbolos utilizados nas expressões regulares:
* * == significa zero ou mais (lembre-se que + significa um ou mais)
* ? == significa zero ou um
* { } == as chaves podem ter número mínimo ou máximo de ocorrências
* ( ) == parênteses significam uma sequência exata de caracteres
* | == significa "ou"
* . == significa qualquer caractere (inclusive símbolos)
Não podemos esquecer também que para usar caracteres especias devemos sempre utilizar a barra invertida ('\').
Em seguida estou enviando algumas validações muito usadas no dia-a-dia:
Data:
echo (ereg("^[0-9]/[0-9]/[0-9]",
$texto,
$regs) ?
"" :
"não ").
"é uma data no formato DD-MM-AAAA<br />";
E-email:
echo (eregi("^[_-.0-9a-z]+@[_-.0-9a-z]+$",
$texto) ?
"" :
"não ").
"é um e-mail válido (aceita letras, números, '_', '-' e '.'<br />";
CNPJ:
echo (ereg("^[0-9].[0-9].[0-9]/[0-9]-[0-9]$",
$texto) ?
"" :
"não ").
"é um CNPJ válido (exemplo: 12.345.678/0001-95 (dígito verificador não calculado)<br />";
CPF:
echo (ereg("^([0-9].)[0-9]-[0-9]$",
$texto) ?
"" :
"não ").
"é um CPF válido (exemplo: 123.456.789-09 (dígito verificador não calculado)<br />";
Nome:
echo (ereg("^([a-zA-Zà-üÀ-Ü0-9'.]+[ ]?)+$",
$texto) ?
"" :
"não ").
" é um nome correto. <br />";
RG:
echo (ereg("^[0-9].[0-9].[0-9]-[0-9]$",
$texto) ?
"" :
"não ").
"é um RG válido. Formato: 12.345.678-9 (dígito verificador não calculado)<br />";
CEP:
echo (ereg("^[0-9].[0-9]-[0-9]$",
$texto) ?
"" :
"não ").
"é um CEP válido. Formato: 12.345-678<br />";
TELEFONE:
echo (ereg("^([0-9])[0-9]-[0-9]$",
$texto) ?
"" :
"não ").
"é um TELEFONE válido. Formato: (21)1234-5678<br />";
É isso aí galera, se gostaram é só copiar o código e usar, e de preferência...
** Comentem...
** Votem... e
** Indiquem!!