Visualizzazione risultati 1 fino 15 di 15

Discussione: Espressioni Regolari: form per validare video da youtube

  1. #1
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito Espressioni Regolari: form per validare video da youtube

    Salve raga, stavo abbozzando questo codice:
    Codice PHP:
    preg_match('/width="(.*)"/#i', $_POST["text"], $width);

    preg_match('/height="(.*)"/#i', $_POST["text"], $height);

    preg_match('/name="movie" value="(.*)"/#i', $_POST["text"], $movie);

    $validobject = '<object type="application/x-shockwave-flash" style="width: '.$width[0].'px; height: '.$height[0].'px;" data="'.$movie[0].'">
    <param name="allowFullScreen" value="true" />
    <param name="movie" value="'
    .$movie[0].'" />
    </object>'
    ;

    echo
    "<textarea rows=\"4\" cols=\"95\">\n";
    echo
    htmlspecialchars($validobject);
    echo
    "\n</textarea>";
    Ma, ovviamente, non mi funziona (i campi rimangono nulli
    Vi spiace darmi una mano per capire dov'è che sbaglio?
    Ultima modifica di darkwolf : 27-03-2010 alle ore 20.36.16

  2. #2
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Prova così:
    Codice PHP:
    preg_match('#width="(.*)"#is', $_POST["text"], $width);

    preg_match('#height="(.*)"#is', $_POST["text"], $height);

    preg_match('#name="movie" value="(.*)"#is', $_POST["text"], $movie);

  3. #3
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Grazie :)
    Questo il codice inserito nel form:
    Codice PHP:
    <object width="660" height="405"><param name="movie" value="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405"></embed></object>
    questo il risultato (ben diverso da ciò che volevo ottenere:
    Codice PHP:
    <object type="application/x-shockwave-flash" style="width: width="660" height="405"><param name="movie" value="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405"px; height: height="405"><param name="movie" value="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405"px;" data="src="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405"">
    <param name="allowFullScreen" value="true" />
    <
    param name="movie" value="src="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405"" />
    </object>
    Ultima modifica di darkwolf : 28-03-2010 alle ore 01.30.05

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Il problema è che stai usando $heigh[0], etc...
    Nell'indice 0 hai soltanto il testo trovato nella sua forma originale, mentre nel tuo caso nell'indice 1 avrai direttamente il dato:
    Codice PHP:
    $validobject = '<object type="application/x-shockwave-flash" style="width: '.$width[1].'px; height: '.$height[1].'px;" data="'.$movie[1].'">
    <param name="allowFullScreen" value="true" />
    <param name="movie" value="'
    .$movie[1].'" />
    </object>'
    ;

  5. #5
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Il problema è che stai usando $heigh[0], etc...
    Nell'indice 0 hai soltanto il testo trovato nella sua forma originale, mentre nel tuo caso nell'indice 1 avrai direttamente il dato:
    ...
    Portandolo a 1 ottengo questo:
    Codice PHP:
    <object type="application/x-shockwave-flash" style="width: 660" height="405"><param name="movie" value="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405px; height: 405"><param name="movie" value="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405px;" data="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405">
    <
    param name="allowFullScreen" value="true" />
    <
    param name="movie" value="http://www.youtube-nocookie.com/v/hrYLpXa6PYg&hl=it_IT&fs=1&color1=0x006699&color2=0x54abd6&border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405" />
    </
    object>

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Forse è colpa dell'espressione, sta prendendo più di quello che deve, prova così:
    Codice PHP:
    preg_match('#width="([^"]*)"#i', $_POST["text"], $width); // oppure .*?

    preg_match('#height="([^"]*)"#i', $_POST["text"], $height); // idem

    preg_match('#src="([^"]*)"#i', $_POST["text"], $movie); // idem
    Ultima modifica di javascripter : 27-03-2010 alle ore 21.19.10

  7. #7
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Ottimo, funziona alla grande adesso :)
    SemiOT: ti spiace spiegarmi in due parole la differenza tra
    src="([^"]*)"
    contro
    '#src="(.*)"#is'
    inoltre cosa indica #is (o #i o #s)? :)

  8. #8
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Certo :)
    [^"] => qualsiasi carattere che non sia una virgoletta
    . => qualsiasi carattere (escluso il carattere a capo)

    * = 0 o più occorrenze

    Poi dopo il delimitatore # si possono inserire i modificatori, i indica case insensitive, s aggiunge il carattere a capo al .

    Qui trovi una lista: http://www.php.net/manual/en/referen....modifiers.php
    Ultima modifica di javascripter : 27-03-2010 alle ore 21.38.52

  9. #9
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    OK, grazie per il chiarimento :)
    PS: se qualcuno desiderasse provarlo e/o testarlo: http://darkwolf.altervista.org/videovalidator/

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da darkwolf Visualizza messaggio
    PS: se qualcuno desiderasse provarlo e/o testarlo: http://darkwolf.altervista.org/videovalidator/
    Fatto, provato e funzionante.

  11. #11
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Citazione Originalmente inviato da musicanapoli Visualizza messaggio
    Fatto, provato e funzionante.
    Ti è"andata" bene (ci stavo facendo giusto adesso due ritocchi) :)
    Grazie per averlo testato ;)
    Domani farò qualche ritocco grafico e poi proverò a far accettare anche il "solo" link :)
    -
    Edit:
    Allora, alla fine dei conti ho questa (me la gestisco singolarmente sfruttando alcuni str_replace):
    Codice:
    preg_match('#(http:\/\/(www.|)(youtube|facebook|video.google).([a-z]{2,3})\/(v|googleplayer.swf[?]docid=-)([\/]*)([-_&=a-z0-9]*))#i', $_POST["text"], $movie);
    Ho provato in tutti i modi a mandare in errore in caso di "invio" (newline) e/o "spazi vuoti" nella textarea, ma proprio non ci sto riuscendo
    Ultima modifica di darkwolf : 30-03-2010 alle ore 01.19.51

  12. #12
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    In pratica vuoi mandare in errore quando c'è uno spazio (\n, \t, &nbsp;)?
    Prova con questa:
    Codice PHP:
    if(preg_match('#\s+#', $_POST['text'])) {
    echo
    'spazio trovato, errore!';
    }
    \s è una classe di caratteri che contiene [\n\r\t ] (qualsiasi spazio bianco)

    P.S. Nella regexp hai fatto l'escape al / dato che il delimitatore è # non serve e per esseri sicuri fallo al punto:
    Codice:
    #(http://(www\.)?(youtube|facebook|video\.google)\.([a-z]{2,3})/(v|googleplayer\.swf\??docid=-)/*([\-_&=a-z0-9]*))#i
    Ultima modifica di javascripter : 31-03-2010 alle ore 19.18.33

  13. #13
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    In pratica vuoi mandare in errore quando c'è uno spazio (\n, \t, &nbsp;)?
    Prova con questa:
    Codice PHP:
    if(preg_match('#\s+#', $_POST['text'])) {
    echo
    'spazio trovato, errore!';
    }
    \s è una classe di caratteri che contiene [\n\r\t ] (qualsiasi spazio bianco)

    P.S. Nella regexp hai fatto l'escape al / dato che il delimitatore è # non serve e per esseri sicuri fallo al punto:
    Codice:
    #(http://(www\.)?(youtube|facebook|video\.google)\.([a-z]{2,3})/(v|googleplayer\.swf\??docid=-)/*([\-_&=a-z0-9]*))#i
    Esatto ma, non in un punto qualunque (altrimenti embed e object andrebbero sempre in errore).
    In pratica voglio evitare l'inserimento di un doppio object (youtube e facebook) e di un doppio embed (googlevideo non da object ma solo embed) e l'inserimento di spazi e newline prima e/o dopo del codice (che macello) :P
    Cioè, deve iniziare con http* e finire così (senza spazi e altro); oppure con <embed(*)/embed> oppure con <object(*)/object>.
    Ok, farò qualche prova, grazie :)

    Edit:
    Per i link e per il tag object ho finalmente risolto così (forse non è di correttezza assoluta ma sembra funzionare):
    Codice PHP:

    // Controlla la presenza di caratteri non validi nel "semplice link":
    if (empty($width) && empty($height) && (preg_match('#\s+#', $_POST['text'])) || empty($width) && empty($height) && (!preg_match('#^http://(www\.)?(.+)\.([a-z]{2,3})/(.+)$#', $_POST['text']))) {
    die (
    '<hr />Rilevati caratteri non ammessi (nel solo link non sono tollerati spazi e/o newline e deve iniziare con http://)');}

    // Controlla la presenza di caratteri non validi nell'object "semplice link":
    if (!empty($width) && !empty($height) && (preg_match('#.+<object(.*)/object>#', $_POST['text'])) || (preg_match('#<object(.*)/object>.+#', $_POST['text'])) || (preg_match('#.+<object(.*)/object>.+#', $_POST['text']))) {
    die (
    '<hr />Rilevati caratteri non ammessi (prima e/o dopo l\'object non sono accettati altri caratteri)');}
    PS: poco fa mi hai consigliato di modificare un po' la regexp (anche se comunque funzionava) e tra le modificahe ho notato anche questo slash qui: ([\-_&=a-z0-9]*))#i
    Mi chiedevo: come mai? :)
    Ultima modifica di darkwolf : 31-03-2010 alle ore 22.08.05 Motivo: Piccolo cambiamento :)

  14. #14
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Il - indica in una classe di caratteri una sequenza, ad esempio dalla a alla z: [a-z].
    Quindi se si vuole cercare il carattere - all'interno di una classe di caratteri bisogna fare l'escape, tu mi dirai che funziona anche senza ma io sono pignolo !

  15. #15
    L'avatar di darkwolf
    darkwolf non è connesso Salvatore Noschese
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    6,558

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Il - indica in una classe di caratteri una sequenza, ad esempio dalla a alla z: [a-z].
    Quindi se si vuole cercare il carattere - all'interno di una classe di caratteri bisogna fare l'escape, tu mi dirai che funziona anche senza ma io sono pignolo !
    OK, fai bene, anch'io (quando so ciò che faccio) :D
    PS: ok, tutto completato:
    Codice PHP:

    // Controlla la presenza di caratteri non validi nel "semplice link":
    if (empty($width) && empty($height) && (preg_match('#\s+#', $_POST['text'])) || empty($width) && empty($height) && (!preg_match('#^http://(www\.)?(.+)\.([a-z]{2,3})/(.+)$#', $_POST['text']))) {
    die (
    '<hr />Rilevati caratteri non ammessi (nel solo link non sono tollerati spazi e/o newline e deve iniziare con http://)');}

    // Controlla la presenza di caratteri non validi nell'object (facebook e youtube):
    if (!empty($width) && !empty($height) && (preg_match('#.+<object(.*)/object>#', $_POST['text'])) || (preg_match('#<object(.*)/object>.+#', $_POST['text'])) || (preg_match('#.+<object(.*)/object>.+#', $_POST['text']))) {
    die (
    '<hr />Rilevati caratteri non ammessi (prima e/o dopo l\'object non sono accettati altri caratteri)');}

    // Controlla la presenza di caratteri non validi nell'embed (video.google):
    if (!empty($width) && !empty($height) && (!preg_match('#http://(www\.)?(youtube|youtube-nocookie|facebook)\.([a-z]{2,3})//(.+)#', $_POST['text'])) && (preg_match('#.+<embed(.*)/embed>#', $_POST['text'])) || (preg_match('#<embed(.*)/embed>.+#', $_POST['text'])) || (preg_match('#.+<embed(.*)/embed>.+#', $_POST['text']))) {
    die (
    '<hr />Rilevati caratteri non ammessi (prima e/o dopo l\'embed non sono accettati altri caratteri)');}

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •