Ygornet 0 Denunciar post Postado Fevereiro 14, 2008 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 864 Denunciar post Postado Fevereiro 14, 2008 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_. Compartilhar este post Link para o post Compartilhar em outros sites
Ygornet 0 Denunciar post Postado Fevereiro 14, 2008 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
Ygornet 0 Denunciar post Postado Fevereiro 14, 2008 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
Beraldo 864 Denunciar post Postado Fevereiro 14, 2008 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
Ygornet 0 Denunciar post Postado Fevereiro 15, 2008 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
Beraldo 864 Denunciar post Postado Fevereiro 15, 2008 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
Ygornet 0 Denunciar post Postado Fevereiro 15, 2008 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
Beraldo 864 Denunciar post Postado Fevereiro 15, 2008 .*?([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 Compartilhar este post Link para o post Compartilhar em outros sites