[php] regex e imageshack
[php] regex e imageshack postato il 18/12/2009 22:49:36 nel forum programmazione, open source e hosting
Ciao, volevo segnalare che ho provato ad adattare il pacchetto BBcode di Blancks alle mie esigenze: non mi servivano né i BBcode né il controllo sulle dimensioni dell'immagine, ma solo una regex per valutare l'url delle immagini inserite dagli utenti in una scheda, per assicurarmi che provenissero da imageshack.us
Ho pensato quindi di potermela cavare con una funzione di validazione molto leggera, confrontando con preg_match l'url inserito e la regex fornita da blancks.
Premessa: con le regex vado molto a naso, purtroppo non sono ancora riuscito bene ad addomesticarle anche se mi ci sto impegnando.. insomma, non escludo di aver sbagliato qualcosa.
Ad ogni modo, il problema sembra essere che la regex contenuta nel pacchetto causa una serie di errori, la maggior parte per mancato riconoscimento di caratteri.
Questa la regex fornita col pacchetto BBcode:
$regexpUrl = "https?://img[0-9]{2,3}.imageshack.us/img[0-9]{2,3}/[0-9]{3,4}/[-w_.]+.(png|jpg|gif)";
Alla fine, "smanettando" e goggleando un po', questa é la regex che ho inserito io nella funzione, finalmente senza incontrare errori al momento dell'esecuzione dello script:
function img_valida($url) {
$url = trim($url);
if( !preg_match('/^(http|https)://(img)[0-9]{2,3}.(imageshack).(us)/(img)[0-9]{2,3}/[0-9]{3,4}/[-w_.]+.(png|jpg|gif|PNG|JPG|GIF)$/i',$url) )
{
...BLA BLA BLA...;
}
return $url;
} // fine function img_valida()
Apparentemente la funzione restituisce (dopo diverse prove) i risultati attesi, se l'url dell'immagine non é di quelle di imageshak.us... tuttavia resto con questi dubbi ancestrali:
1) Perchè non funzionava quella del pacchetto di blancks?
2) La mia é scritta bene o funziona solo perchè ho fatto le prove più semplici e mi lascia invece le spalle scoperte su altri casi non previsti dall'espressione?
Grazie e scusate.. sfortunatamente, come ho detto, le regex non le domino ancora a dovere.
ps: sto su netsons.
Pagine → 1
18/12/2009 22:56:39
La regexp che trovi nel mio pacchetto è isolata in una variabile, ma viene inclusa in una stringa dove poi viene completata.
Nel tuo caso ti bastava riadeguar la mia intrododucendo gli opportuni delimitatori e i meta caratteri ^ e $ per indicare che l'url deve comporre l'intera stringa da analizzare, tipo così:
$regexpUrl = "/^https?://img[0-9]{2,3}.imageshack.us/img[0-9]{2,3}/[0-9]{3,4}/[-w_.]+.(png|jpg|gif)$/i";
E infine adoperarla nel preg match.
Ad occhio e croce ora dovrebbe funzionare senza problemi.
Secondariamente, il parametro dopo l'ultimo slash della regexp ( i ) indica la ricerca del pattern in modalità `case insensitive` quindi non occorre specificare anche PNG,JPG e GIF ;-)
18/12/2009 23:03:01
Uhm... quindi posso evitarle quelle parentesi tonde attorno alle parti "fisse" del testo (tipo "http", "imageshack", etc)?
ps: grazie della dritta sull'uso della "i" per il check case insensitive ... alla fine ci stavo sbattendo la testa da circa due ore e dev'essermi sfuggito 🙃
18/12/2009 23:11:31
ghennadi72 ha scritto: Uhm... quindi posso evitarle quelle parentesi tonde attorno alle parti "fisse" del testo (tipo "http", "imageshack", etc)?
ps: grazie della dritta sull'uso della "i" per il check case insensitive ... alla fine ci stavo sbattendo la testa da circa due ore e dev'essermi sfuggito 🙃
Certamente, in conclusione è equivalente la cosa, solo che nel mio caso il metacarattere punto interrogativo rende valido il match anche se la `s` non è presente, mentre tu specifichi esplicitamente o `http` o `https`
La mia regexp nell'ambito della funzione che ho sviluppato funziona (w i giochi di parole) infatti, non so se l'hai testata tramite la paginetta di prova che avevo appositamentei incluso nel pacchetto :p
Comunque dai un occhio a questo sito, mi sembra sufficientemente completo per un introduzione minima alle regular expressions, spero ti possa tornar utile http://fido.altervista.org/RegExp/regex.html ↗ ;-)
19/12/2009 01:31:29
Per il semplice motivo che mancando il pattern successivo io posso manipolare le informazioni da inserire alla fine del link al fine di caricare file javascript manipolando il tag img.
Motivo per cui ho creato un pattern che esaminasse l'url per intero ;-)
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
RAID Shadow Legends ↗
Hero Wars ↗
Sea of Conquest ↗
CRSED: F.O.A.D. ↗
War Thunder ↗