Zend_Validate_Regex: Problema validazione

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
 

smn

Nuovo Utente
28 Dic 2009
7
0
0
Napoli
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.
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
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.
 

smn

Nuovo Utente
28 Dic 2009
7
0
0
Napoli
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?
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
24
Roma
alessandro1997.netsons.org
Non vedo il problema, tu sei per il parere di eliminare direttamente il carattere? Allora basta applicare questo alla variabile:
PHP:
$nome = str_replace('`', '', $nome);
Oppure intendi fare in un'altra maniera?
 

smn

Nuovo Utente
28 Dic 2009
7
0
0
Napoli
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.
 

smn

Nuovo Utente
28 Dic 2009
7
0
0
Napoli
ho risolto, il pattern corretto era il seguente :

/^[0-9A-Za-z\[\]\/\x20\x7b\x7d\x2e*]{3,15}$/
 
Discussioni simili
Autore Titolo Forum Risposte Data
M Installazione libreria Zend GData per google Api PHP 0
S Zend framework .NET Framework 1
voldemort Zend framework 2 doctrine orm subquery PHP 1
M [Offro lavoro] Programmatore web Zend MVC Offerte e Richieste di Lavoro e/o Collaborazione 0
danlupo Zend FrameWork PHP 0
C Zend Framework: tutotial PHP 1
C [RETRIBUITO] Cercasi programmatore Zend Framework Offerte e Richieste di Lavoro e/o Collaborazione 0
L Aruba wimdows e librerie zend Hosting 2
Z Problema Zend Tools PHP 2
Z Problema Zend Framework [era Zend Framework mhhh?] PHP 2
T Cerco sviluppatori Zend, Ajax e Javascript Altri Annunci 0
MarcoGrazia jquery validate() controllo checkbox jQuery 2
MarcoGrazia jquery validate, necessità di validare almeno un elemento select su due jQuery 1
Q [Javascript] data validate Javascript 2
MarcoGrazia Validazione forum con jquery.validate jQuery 2
T validate required due campi alternativi jQuery 2
F Jquery validate jQuery 1
R Validate form mondiale PHP 2
V Problemi con Validate jQuery 4
J Validate E-Mail Javascript 8
A Regex per isolare link interni con rel noopener PHP 0
MarcoGrazia [PHP] [regex] Validare un url PHP 2
K Come eliminare attributi regex per validazione con javascript Javascript 0
MarcoGrazia [Javascript] Regex per la validazione di un numero di telefono. Javascript 2
A [PHP] Blocco mail spam con regex PHP 2
otto9due [PHP] Dubbio esistenzaile: Regex email e stampa valori trovati.. PHP 5
Shyson Regex strana jQuery 0
MarcoGrazia [regex] validare un textbox con solo caratteri alfabetici. Javascript 6
A Regex per estrapolare url da testo PHP 5
G problema con regex PHP 0
Shyson Regex multipla PHP 0
S Regex ASP.NET 1
M RegEX ottenere testo tra due tag PHP 6
A haccess regex username PHP 11
A Regex array PHP 1
A Regex per domini .de PHP 2
S Regex per replace di un BBcode con parametri PHP 4
Shyson Regex accetta 2 volte il trattino Javascript 1
9 Estrarre Link da pagina web con una Regex Programmazione 0
L aiuto per questa semplice regex PHP 5
SolidSnake4 regex convalida mail PHP 15
G Regex in PHP PHP 2

Discussioni simili