2010-07-31 10 views
7
function isUserID($username) { 
    if (preg_match('/^[a-z\d_]{2,20}$/i', $username)) { 
    return true; 
    } else { 
    return false; 
    } 
} 

Facile ..., ho questo, puoi spiegare per cosa controlla? So che controlla se il nome utente ha una lunghezza compresa tra 2 e 20, che altro? Graziepreg_match() e nome utente

risposta

26

Cerca testo contenente solo caratteri alfanumerici e di sottolineatura, da 2 a 20 caratteri.

 
/^[a-z\d_]{2,20}$/i 
|||| | |||  ||| 
|||| | |||  ||i : case insensitive 
|||| | |||  |/ : end of regex 
|||| | |||  $ : end of text 
|||| | ||{2,20} : repeated 2 to 20 times 
|||| | |] : end character group 
|||| | _ : underscore 
|||| \d : any digit 
|||a-z: 'a' through 'z' 
||[ : start character group 
|^ : beginning of text 
/: regex start 
+0

Se si desidera array_reverse (your_code_lines), dovrebbe essere più facile da leggere. L'ultima linea sarebbe la soluzione, ma le istruzioni saranno da sinistra a destra dall'alto verso il basso;). Ah, solo un piccolo scherzo, +1. –

+0

Ottima risposta! Grazie! – zur4ik

0

Sta inoltre controllando se contiene caratteri diversi dall'alfabeto, a-z e A-Z, cifre da 0 a 9 e _.

Oppure si potrebbe dire, controllando che contenga solo caratteri alfanumerici e _.

Questo potrebbe essere riscritto per essere anche più semplice - preg_match restituisce un int, quindi non c'è motivo di usare il pattern 'return false, return true'.

function isUserID($username){ return (bool)preg_match('/^[a-z\d_]{2,20}$/i', $username); } 

Farei la stessa cosa.

Inoltre, \w significa la stessa cosa di quei caratteri. Lettere, cifre e sottolineatura. Quindi, anche se sarebbe meglio

function isUserID($username){ return (bool)preg_match('/^[\w]{2,20}$/i', $username); } 
+1

Direi che controlla contiene solo in inglese caratteri alfanumerici ** ** e _. Potrebbe essere rilevante dal momento che l'OP sostiene che è svedese. – Artefacto

+0

@Artefacto: direi caratteri ** ASCII **. L'inglese usa lettere accentate ogni volta che l'umore lo prende, e molte altre lingue usano i caratteri ASCII. –

1

Si controlla per vedere che il nome utente è composta da 2 a 20 caratteri che sono le lettere (maiuscole o minuscole, grazie alla bandiera i), numeri o un carattere di sottolineatura.

Questo può essere abbreviato in due modi: in primo luogo, il costrutto if non è necessario. In secondo luogo, è possibile utilizzare \w come sostituto per gli stessi caratteri, quindi:

function isUserID($username) { 
    return preg_match('/^\w{2,20}$/', $username); 
} 
0

Esso controlla letteralmente se $username costituito da una sequenza di 2 a 20 caratteri di a - z, A - Z (a causa della i flag per insensibilità del maiuscolo/minuscolo), 0 - 9 (per \d) e _.

2
/^[a-z\d_]{2,20}$/i 

splicing in su:

/ è il delimitatore regex; puoi scegliere qualsiasi cosa tu voglia, ma una barra in avanti è la più comune.

^^ significa "inizio partita di input": la seguente espressione deve essere all'inizio per la regex da far corrispondere.

[a-z\d_] è una classe di caratteri; significa "qualsiasi carattere tra parentesi quadre"; la barra rovesciata combinata con la d è una scorciatoia per "cifre" e il trattino indica un intervallo inclusivo; quindi, la classe di caratteri dice 'qualsiasi lettera o cifra, o il carattere di sottolineatura'.

{2;20} è un quantificatore che dice che l'espressione precedente (la classe di carattere) deve essere ripetuta da 2 a 20 volte.

$ significa "match end of input", simile a ^.

Un altro / termina la regex stessa; Quello che segue sono le opzioni di processione, in questo caso i, che significa 'case-insensitive'.

0

Si sta verificando per 2-20 caratteri alfanumerici parola maiuscole e minuscole che si compone di lettere, numeri e _