2012-08-08 12 views
8

Vorrei creare una funzione preg_match per convalidare i miei passowrd, ma non sono sicuro di come scriverlo per consentire l'utilizzo dei seguenti caratteri speciali: [email protected]#$% .

if(!preg_match(?????)$/', $password)) 

Qui sono le mie regole per le password che voglio lavorare nella regex:

  • Può contenere lettere e numeri
  • Deve contenere almeno 1 numero e 1 lettera
  • può contenere qualsiasi di questi caratteri: [email protected]#$%
  • Deve essere 8-12 caratteri

Grazie per l'aiuto che puoi offrire.

+2

Si prega di considerare che consentire password più lunghe preferisco che il mio sia di 20 + caratteri, e non ti farà male permetterlo. Non capisco i siti che hanno una lunghezza massima - li memorizzi come hash e qual è il problema? –

+0

@Dragon Ho aumentato il numero massimo di 50 caratteri. È un sito semplice e credo che stavo pensando che 8-12 caratteri sarebbero più facili da ricordare per le persone e meno probabilità di dover reimpostare la password. Ma come hai detto tu, con la password crittografata, non è davvero un grosso problema. –

+0

lascio che lastpass ricordi tutte le mie password per me :-) –

risposta

41

credo che questo dovrebbe essere simile che:

if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[[email protected]#$%]{8,12}$/', $password)) { 
    echo 'the password does not meet the requirements!'; 
} 

tra l'inizio ->^
E end ->$
della stringa ci deve essere almeno un numero ->(?=.*\d)
e almeno una lettera ->(?=.*[A-Za-z])
e deve essere un numero, una lettera o una delle seguenti:! @ # $% ->[[email protected]#$%]
e ci devono essere 8-12 caratteri ->{8,12}

Come user557846 commentato alla tua domanda, Vorrei anche suggerire di consentire più caratteri, di solito (se io uso un massimo) prendere almeno 50 :)

btw, si potrebbe voler dare un'occhiata a this regex tutorial

+3

Grazie! Questo sta funzionando per me. E grazie per aver spiegato ogni parte di esso. Questo mi aiuta davvero a capirlo meglio. Ho anche esplorato il tutorial che hai suggerito e che sembra una grande risorsa per la prossima volta che mi occupo di regex. E ho fatto il massimo di 50 personaggi. –

-1

Cerca classi di caratteri, una funzione di base delle espressioni regolari.

+0

Grazie per avermi indicato nella giusta direzione. –

+0

Questa non è una linea di confine, specialmente se paragonata alla risposta accettata. Forse potresti ampliarlo piuttosto che dire a qualcuno di cercare qualcosa. Grazie. – Kev

-1
if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[[email protected]#$%]{8,12}$/', $password)) { 
    echo 'the password does not meet the requirements!'; 
    } 

Nella dichiarazione di cui sopra .. cosa possibile la password quindi esiste ?.

+0

please help me..perché ho inserito caratteri diversi ma non esiste .. "la password non soddisfa i requisiti! – christine

+0

if (! Preg_match ('/^(? =. * D) (? =. * [A-Za-z]) [0-9A-Za-z! @ # $%] {8,12} $/', $ password)) { echo' la password non soddisfa i requisiti! '; } – christine

+0

in dichiarazione precedente ... è tutto il corpo può darmi una password che si adatta alla mia "preg_match password" .. perché ho inserito dffernt combinazione di password ma non può presentare .. – christine

6
preg_match('/^(?=.*\d)(?=.*[@#\-_$%^&+=§!\?])(?=.*[a-z])(?=.*[A-Z])[[email protected]#\-_$%^&+=§!\?]{8,20}$/',$password) 
  • almeno un carattere minuscolo
  • almeno un carattere maiuscolo
  • almeno una cifra
  • almeno un segno speciale di @ # $%^-_ & + = §! ?
+0

La risposta di Thomas è meglio spiegata di quella di r3bel. – Alreadytakenindeed

0

Ho fatto questo con il mio modulo personalizzato drupal in hook_form_validate qui la password dovrebbe essere di 6 caratteri di lettere, numeri e almeno un carattere speciale.

<? 
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[[email protected]#$%])[[email protected]#$%]{6,15}$/', $form_state['values']['pass'])) { 
    form_set_error('pass', t('Password must contain 6 characters of letters, numbers and at least one special character.')); 
} 
?> 
1

ho sviluppato una regex completo per un po 'di controllo più complesso

/^(?=.*\d)(?=.*[A-Za-z])(?=.*[A-Z])(?=.*[a-z])(?=.*[ !#$%&'\(\) * +,-.\/[\\]^_`{|}~\"])[0-9A-Za-z !#$%&'\(\) * +,-.\/[\\]^_`{|}~\"]{8,50}$/ 

Fondamentalmente ho controllare la password per avere 1 cifra, 1 capital, 1 inferiore e 1 carattere speciale. Spero che questo aiuti qualcuno a cercare un'espressione regolare.

0
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[[email protected]#$%])[[email protected]#$%] 
{6,15}$/',($_POST['password']))) { 
    $message='Password must contain 6 characters of letters, numbers and 
    at least one special character.'; 
} 
+0

Dovresti essere più chiaro. –

2

mi piaceva la risposta di r3bel, così ho avuto un gioco con esso e si è conclusa con il seguente come funzione password controllo:

function password_strength_check($password, $min_len = 8, $max_len = 70, $req_digit = 1, $req_lower = 1, $req_upper = 1, $req_symbol = 1) { 
    // Build regex string depending on requirements for the password 
    $regex = '/^'; 
    if ($req_digit == 1) { $regex .= '(?=.*\d)'; }    // Match at least 1 digit 
    if ($req_lower == 1) { $regex .= '(?=.*[a-z])'; }   // Match at least 1 lowercase letter 
    if ($req_upper == 1) { $regex .= '(?=.*[A-Z])'; }   // Match at least 1 uppercase letter 
    if ($req_symbol == 1) { $regex .= '(?=.*[^a-zA-Z\d])'; } // Match at least 1 character that is none of the above 
    $regex .= '.{' . $min_len . ',' . $max_len . '}$/'; 

    if(preg_match($regex, $password)) { 
     return TRUE; 
    } else { 
     return FALSE; 
    } 
} 

lunghezze massimi/minimi sono di default o regolabile, ogni esigenza è attivo di default, ma può essere disattivato, e volevo supportare qualsiasi simbolo in modo che l'ultima esigenza sia "tutto ciò che non è uno dei tipi sopra", piuttosto che un set fisso di simboli.

Problemi correlati