Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
Alguem poderia me ajudar como fazer para formatar uma senha da seguinte forma:
Na senha deve conter no minimo, 2 letras, 4 numeros e 1 Caracter Especial.
Tipo:
ab1234! ou 5678cd@ ou #e9f012
Com a função ereg eu consigo fazer essa formatação?
Alguem pode me dar uma dica?
Beraldo,
nao consegui fazer por preg_match, e to tentando fazer por ereg emsmo , testando cada situação. Mas tb nao to conseguindo.
Veja só se pode me ajudar:
$num = eregi("[0-9]", $_POST['senha']);
echo $num;
$qnt_num = strlen($num);
if($qnt_num >= 4){
echo"maior ou igual a 4 numeros";
}
else{
echo"nao é maior ou igual a 4 numeros";
}
Mas assim q eu dou "echo $num;" me retorna 1 e nao todos os numeros que contem a linha. Como eu faria pra pegar na variavel todos os numeros existentes na variavem $num?Tentando fazer por "preg_replace":
$senha = $_POST['senha'];
$pai = array('[0-9]');
$var1 = "";
$num = preg_replace($pai, $var1, $senha);
echo $num;
$qnt_num = strlen($num);
if($qnt_num >= 4){
echo"maior ou igual a 4 números";
}
else{
echo"menor q 4 números";
}
Mas dessa forma se eu coloco letras ele conta e imprime as letras tb. No caso era pra contar só os numeros como eu estou limitando na linha "$pai = array('[0-9]');"
Alguem me ajuda!
Consegui assim:
$senha = "ab1234+";
preg_match("/[a-z]+/i", $senha, $letras);
preg_match("/[0-9]+/", $senha, $numeros);
preg_match("/[^a-z0-9]+/i", $senha, $especiais);
echo "
<p>Total de letras: " . strlen($letras[0]) . "</p>
<p>Total de números: " . strlen($numeros[0]) . "</p>
<p>Total de caracteres especiais: " . strlen($especiais[0]) . "</p>
";
Talvez haja uma forma melhor, mas não me vem nada à cabeça agora. :(
Nesse script, é bom usar isset() para ver se $array[0] (sendo "$array" um dos arrays de preg_match) existe, pois, se não houver um dos caracteres, o índice zero não existirá. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Beraldo,
entao , vamos lá...
em meio de minhas inumeras tentativas, eu consegui fazer o mesmo que tu fez aí , porem se eu nao me engano foi com preg_replace(). Nao sei ao certo pq jah tentei com inumeras funções.
Mas aí que esta o meu problema de nao conseguir resolver. Vou tentar explicar.
Dessa forma oq acontece:
se a senha é 'ab1234+' a contagem é exata, da 2 letras, 4 numeros e 1 caracter especial.
Mas se eu coloco a seguinte senha:
senha 'w1w2w3+' a contagem fica errada fica 1 letra, 1 numero e 1 caracter especial.
Ou seja oq eta acontecendo neste caso é que só é contado mais de uma letra ou numero ou caracter especial se eles estiverem em sequencia. Meu problema é exatamente esse, varrer a variavel e pegar a quantidade de numeros , letras e caracteres especiais independente de eles estar em sequencia ou nao.
Ex de como esta:
senha: as3+456 letras:2, numeros:1, caracter especiais:1
a45b!33 letras:1 , numeros:2, caracter especiais:1
a+34b45c letras:1 , numeros:2, caracter especiais:1
Ex de como seria:
senha: as3+456 letras:2, numeros:4, caracter especiais:1
a45b!33 letras:2 , numeros:4, caracter especiais:1
a+34b45c letras:3 , numeros:4, caracter especiais:1
Num to conseguindo fazer dessa forma :wacko:
Compliquei-me aqui, mas deu certo. ::)
$senha = "ab_-12pl34+=fe65r09";
$letras = preg_replace("/.*?([a-z]*).*?/i", "$1", $senha);
$numeros = preg_replace("/.*?([0-9]*).*?/", "$1", $senha);
$especiais = preg_replace("/.*?([^a-z0-9]*).*?/i", "$1", $senha);
echo "
<p>Senha: " . $senha . "</p>
<p>Total de letras: " . strlen($letras) . " => " . $letras . "</p>
<p>Total de números: " . strlen($numeros) . " => " . $numeros . "</p>
<p>Total de caracteres especiais: " . strlen($especiais) . " => " . $especiais . "</p>
";
veja se é isso.Caramba Beraldo, fiquei zonzo tentando decifrar essa ER.. PUUUUUTZZZZ..
Cara se nao for pedir muito, me explica essas ER que você fez , ou me indica um lugar aew pra ler sem ser o manual , pq ja li o manual e nao consegui intender claramente ql a função de cada caracter na ER.
Valeu m,esmo cara , era exatamente isso que eu precisava , mas agora você me deixou com vontade de aprender isso claramente.. Por Favor se puder esclarecer fico grato..
Abraço.
.?([a-z]).?. -> qualquer caractere -> o caractere anterior zero, uma ou mais vezes
? -> nesse caso, limita o "casamento" dos caracteres, para não casar o ponto com o que está na lista
mas agora você me deixou com vontade de aprender isso claramente..
Que bom! :DAprenda, memso! É muito útil!
Foi postado um artigo ontem sobre isso no sub-fórum de artigos. Dê uma olhada lá. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
em vez de ereg, use preg_match. O próprio Manual do PHP diz que as funções preg_ são mais velozes que as ereg_.