Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ygornet

Formatação de Senha

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

.*?([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! :D

Aprenda, 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.