Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127

    Espressione regolare per verifica password

    Ciao a tutti,
    da giorni sto impazzendo per creare un'espressione regolare da inserire in preg_match (php) che mi riesca a verificare una password con queste caratteristiche:

    minimo 8 caratteri
    minimo 2 lettere minuscole (anche non consecutive)
    minimo 2 lettere maiuscole (anche non consecutive)
    minimo 2 numeri (anche non consecutivi)

    Sono riuscito a fare qualcosa ma la accetta solo se i caratteri da verificare sono consecutivi e in ordine come nell'espressione.

    Ho provato a cercare in rete ma ho trovato solo minino 8 caratteri, 1 lettera e 1 numero ma non 2.

    Attendo con ansia un vostro aiuto

    Ciao a tutti

  2. #2
    Io lo farei con un pattern a parte per ciascuna condizione. Poi conterei quanti matches ha restituito. La prima puoi farla anche con strlen() senza espressione regolare.

    I pattern:
    codice:
    /(.)/
    
    /([a-z])/
    
    /([A-Z])/
    
    /([0-9])/
    Per ognuno di questi fai preg_match(pattern, password, $matches); $numero_elementi = $matches[1]; e verifichi

  3. #3
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127
    Anche io avevo pensato di fare più verifiche però ho trovato questa RegExp e quindi mi sto accanendo per riuscire a far tutto in una riga.

    Questo codice verifica se la password inserita è lunga almeno 8 caratteri e contiene almeno una lettera e almeno un numero:

    ((?=.*[0-9])(?=.*[a-zA-Z]).{8,})

    Potrei modificare questa per avere ciò che cercavo o devo fare per forza più controlli come consigliato da te?

    Non riesco a modificare questa forse perchè non capisco bene cosa significhino gli iniziali ?=.* prima di ogni classe[] e il . prima della {

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    42
    io ho ho pensato a questa soluzione per scoprire se la password ha i requisiti necessari:

    Codice PHP:
    $pass "A45e7000Ci3f";
    echo 
    $pass."</br>";
    $numeri=0;
    $lettere_m 0;
    $lettere_M 0;
    foreach (
    count_chars($pass1) as $i => $val) {
        
    //se sono numeri quindi $i compreso tra 48 e 57
        
    if($i>=48&&$i<=57):
            
    $numeri $numeri+$val;
        endif;
        
    //se sono lettere maiuscole quindi $i compreso tra 65 e 90
        
    if(($i>=65)&&($i<=90)):
            
    $lettere_M $lettere_M+$val;
        endif;
        
    //se sono lettere minuscole quindi $i compreso tra 97 e 122
        
    if(($i>=97)&&($i<=122)):
            
    $lettere_m $lettere_m+$val;
        endif;
    }
    echo 
    "Quanti numeri ci sono? ".$numeri."</br>";
    echo 
    "Quante lettere maiuscole ci sono? ".$lettere_M."</br>";
    echo 
    "Quante lettere minuscole ci sono? ".$lettere_m."</br>"
    non è un espressione regolare...però...

  5. #5
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127
    Dato che ormai sono giorni che ci sto dietro, avevo pensato anche a questo, ovvero la verifica dei caratteri uno ad uno in base al proprio corrispondente ascii.
    Però se ci fosse la possibilità di fare tutto con una riga sarebbe meglio.

    Dico la verità, potrei farla in molti modi però se posso preferirei con l'espressione in modo anche da approfondire le mie conoscenze.

  6. #6
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127
    L'ho risolta così:

    Codice PHP:
    for($i 1$i <= strlen($pass); $i++){
    $carattere substr($pass$i-11);
    $ascii ord($carattere);
    if (
    $ascii >= 48 && $ascii <= 57$numero++;
    if (
    $ascii >= 65 && $ascii <= 90$maiuscole++;
    if (
    $ascii >= 97 && $ascii <= 122$minuscole++;
    }
    echo 
    'Numeri: '.$numero."</br>";
    echo 
    'Maiuscole: '.$maiuscole."</br>";
    echo 
    'Minuscole: '.$minuscole
    o addirittura così:

    Codice PHP:
    for($i 48$i <= 57$i++){
    $numer += substr_count($pass,chr($i));
    }
    for(
    $i 65$i <= 90$i++){
    $maiuscol += substr_count($pass,chr($i));
    }
    for(
    $i 97$i <= 122$i++){
    $minuscol += substr_count($pass,chr($i));
    }
    echo 
    'Numeri: '.$numer."</br>";
    echo 
    'Maiuscole: '.$maiuscol."</br>";
    echo 
    'Minuscole: '.$minuscol

  7. #7
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127
    in effetti anche questa:

    Codice PHP:
    foreach (count_chars($pass1) as $i => $val){
    if(
    $i >= 48 && $i <= 57$num += $val;
    if(
    $i >= 65 && $i <= 90$mai += $val;
    if(
    $i >= 97 && $i <= 122$min += $val;
    }
    echo 
    'Numeri: '.$num."</br>";
    echo 
    'Maiuscole: '.$mai."</br>";
    echo 
    'Minuscole: '.$min
    ma io di tutte preferisco quella dove ho scritto: "o addirittura così: "

    per il semplice fatto che in tutte le altre se non si dichiarano le variabili in principio con valore "0" alla fine se ad esempio numeri non ce ne sono viene scritto:
    Numeri:
    senza nulla.

    Invece nel mio preferito ad ogni verifica la variabile assume un valore, anche "0" senza bisogno di dichiararlo all'inizio.

  8. #8
    Utente di HTML.it L'avatar di andreto
    Registrato dal
    Dec 2012
    Messaggi
    127
    Ultimo esempio:

    Codice PHP:
    $nume $maiu $minu 0;
    $num "0123456789";
    $mai "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $min "abcdefghijklmnopqrstuvwxyz";
    for(
    $a 1$a <= strlen($pass); $a++){
    $caratterepass substr($pass$a-11);
    for(
    $b 1$b <= strlen($num); $b++){
    $caratterenum substr($num$b-11);
    if(
    $caratterepass == $caratterenum$nume++;
    }
    for(
    $c 1$c <= strlen($mai); $c++){
    $caratteremai substr($mai$c-11);
    if(
    $caratterepass == $caratteremai$maiu++;
    }
    for(
    $d 1$d <= strlen($min); $d++){
    $caratteremin substr($min$d-11);
    if(
    $caratterepass == $caratteremin$minu++;
    }
    }
    echo 
    'Numeri: '.$nume."</br>";
    echo 
    'Maiuscole: '.$maiu."</br>";
    echo 
    'Minuscole: '.$minu
    Tutti testati e funzionanti! 'notte

  9. #9
    Tutti testati e funzionanti! 'notte
    ...Certo che tutti funzionano ma non tutti sono usati e conviene anche non usarli!

    Per dirla tutta, il metodo più utilizzato (e anche il migliore) è quello che ti scrivo adesso, che è praticamente il tuo dove hai scritto "L'ho risolta così" ma scritto in "informatichese correggiuto" xD

    Codice PHP:
    $numero $maiuscole $minuscole 0;

    for(
    $i 0$i strlen($pass); $i++){
        
    $ascii ord($pass[$i]);
        if (
    $ascii >= ord('0') && $ascii <= ord('9')) $numero++;
        if (
    $ascii >= ord('A') && $ascii <= ord('Z')) $maiuscole++;
        if (
    $ascii >= ord('a') && $ascii <= ord('z')) $minuscole++;
    }
    echo 
    'Numeri: '.$numero."</br>";
    echo 
    'Maiuscole: '.$maiuscole."</br>";
    echo 
    'Minuscole: '.$minuscole

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    42
    @ZioLuffio
    Giusto per formazione personale visto che sono autodidatta, perchè dici "non tutti sono usati e conviene anche non usarli" ? Quali possono essere le problematiche?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.