2012-11-15 11 views
11

Sto cercando di convalidare un nome utente in PHP utilizzando espressioni regolari e tutto presento non supera il controllo. Sono ancora molto nuovo in questo.Utilizzo di PHP espressioni regolari per convalidare il nome utente

if (!preg_match('/^[A-Za-z]{1}[A-Za-z0-9]{5-31}$/', $joinUser))

Regole:

  • deve iniziare con la lettera
  • 6-32 caratteri
  • Solo lettere e numeri

ho lavorato con this online tester e this one too . Ho letto this thread e this thread ma non sono riuscito a capire molto perché sembra un po 'più complicato del mio (lookaheads? E vari caratteri speciali).

Dopo aver letto il primo thread a cui mi sono collegato, sembra che io sia una delle persone che non capisce bene come dire "lettere" incide su ciò che è considerato accettabile, cioè personaggi stranieri, caratteri accentati, ecc. Sto solo guardando l'alfabeto inglese (è questo ASCII?) E i numeri 0-9.

Grazie.

risposta

28

L'unico problema è che hai sbagliato a digitare l'ultimo quantificatore.

{5-31} deve essere {5,31}

così il vostro regex sarebbe

if (!preg_match('/^[A-Za-z][A-Za-z0-9]{5,31}$/', $joinUser)) 

e si può saltare il {1}, ma non fa male.

+5

Accidenti. Perché è sempre la più piccola cosa che non vedi mai fino a quando qualcuno non lo segnala? Grazie. – gtcharlie

+0

@gtcharlie, solo perché è una cosa più piccola;) – NullPointer

2

Prova questo:

if (!preg_match('/^[A-Za-z][A-Za-z0-9]{5,31}$/', $joinUser)) 
3

A quanto pare tutto il necessario per cambiare era 5,31 5-31.

esempio di lavoro:

if (preg_match('/^[A-Za-z]{1}[A-Za-z0-9]{5,31}$/', "moo123")) 
{ 
    echo 'succeeded'; 
} 
else 
{ 
    echo 'failed'; 
} 
+1

Cool Sono di nuovo in ritardo. Almeno ho imparato qualcosa mentre cercavo di aiutare. –

Problemi correlati