Zend_Validate_Regex: Problema validazione

  • Creatore Discussione Creatore Discussione smn
  • Data di inizio Data di inizio

smn

Nuovo Utente
28 Dic 2009
7
0
0
Napoli
Salve a tutti,

ho creato una semplice form con 3 campi, indirizzo mail, user, password, per la registrazione di un utente.

Sto facendo il tutto utilizzando Zend Framework..ho creato un form con la classe Zend_Form , e gli elementi
Zend_Form_Element_EmailAddress per il campo email
Zend_Form_Element_Text per l'user
Zend_Form_Element_Password per la password

e i rispettivi validator
Zend_Form_Validator_EmailAddress
Zend_Form_Validator_Regex.

Il pattern per il campo user è /[0-9A-Za-z\[\]\/\x20\x7b\x7d\x2e*]{3,15}/

La funzione utilizzata dal framework è preg_match. Pertanto quando utilizzo una stringa che contiene ad esempio il carattere "`" (non ammesso dal pattern) , il metodo isValid del validator relativo al campo user restituisce true, per il semplice fatto che la preg_match con quel pattern e la stringa smn`3ufj48 , restituisce smn.
Il problema dunque è che quando utilizzo il metodo isValid relativo alla classe Zend_Form , il controllo sul nick non è come lo desidero.
Avete mai avuto tali problemi? Risolto in qualche modo?

Grazie 1000

P.S. è il mio primo messaggio, spero di essere stato chiaro e di aver fornito abbastanza informazioni. Purtroppo non ho il codice su questo pc al momento..

Ciao! :D
 
Non ho mai usato le regex PERL-style (in realtà non ho mai usato neanche quelle POSIX), ma solitamente per indicare che un carattere va preso "così com'è" si aggiunge un backslash prima di esso.

Forse sono stato poco chiaro, cerco di ripetermi. La tua risposta è correttissima, infatti alcuni caratteri che io voglio ammettere nell'username sono i seguenti [] , {} , ./ e lo spazio. Infatti alcuni di essi vengono indicati nel pattern con un backslash "\[\]" e altri con il codice esadecimale "\x20\x2e" etc.

Ora cosa succede:
Se inserisco smn come user, ovviamente il form è valido.
Se inserisco smn`cerr4 (il carattere ` non è ammesso nel pattern) il form è valido lo stesso. Analizzando un pò il codice del framework, ho notato che il metodo isValid della classe Zend_Form_Validator_Regex restituisce true in base al valore restituito dalla funzione preg_match. Ho visto come lavorava questa funzione, e ho notato che se inserisco il pattern e la stringa indicata sopra, la funzione restituisce come valore solo la prima parte cercata.
Esempio:

Pattern: /[0-9A-Za-z\[\]\/\x20\x7b\x7d\x2e*]{3,15}/
Stringa: smn86
preg_match($pattern,$stringa) = Array("0" => "smn86")


Pattern: /[0-9A-Za-z\[\]\/\x20\x7b\x7d\x2e*]{3,15}/
Stringa: smn86`c4g56
preg_match($pattern,$stringa) = array("0" => "smn86")

Ovviamente la cosa non va..forse potrei utilizzare la preg_match_all, ma è il caso di modificare il codice del framework?
Sono vincolato dal fatto che il metodo isValid (sia dei validator, che della classe Zend_Form) sono molto utili per validare un form.
 
A questo punto una soluzione per aggirare il problema sarebbe di eliminare preventivamente il carattere in questione direttamente con str_replace, ma non risolvi la cosa. Aspettiamo qualcuno che ne sappia più di me. Ho provato a fare qualche ricerca in merito ma non ho trovato nessun risultato soddisfacente, mi dispiace.
 
secondo te è fattibile in JS prima di una submit ? Il fatto è che qualcuno poi possa mettersi a giocare con FireBug e modificare il codice JS.
Ho pensato anche ad altre soluzioni (non so se siano fattibili)

Tipo restrizioni sul campo user del DB. Al momento della insert, se c'è un errore, ricarico il form e nel campo user metto (con il metodo setValue) un valore sicuramente non buono per quel pattern, cosicch'è da far invalidare il form con il metodo isValid.
Fattibile? Idiozia?
 
no, nel modo in cui fai tu, se cerco di registrarmi con l'user smn`crf4 , se uso str_replace , mi registro con smncrf4, cosa non corretta.
 
ho risolto, il pattern corretto era il seguente :

/^[0-9A-Za-z\[\]\/\x20\x7b\x7d\x2e*]{3,15}$/
 

Discussioni simili