Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Espressioni regolari

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    104

    Espressioni regolari

    Buongiorno ragazzi,ho bisogno un aiuto.
    Mi sono letto una guida sulle espressioni regolari ed ho trovato questo
    Codice PHP:
    <?php
    // come ottenere il nome dell'host da un URL
    preg_match("/^(http:\/\/)?([^\/]+)/i",
    "http://www.php.net/index.html"$matches);
    $NomeHost $matches[2];
    // come ottenere gli ultimi due segmenti del nome dell'host
    preg_match("/[^\.\/]+\.[^\.\/]+$/",$NomeHost,$matches);
    echo 
    "Nome del dominio:  {$matches[0]}\n";
    ?>
    ho capito quello che fa,ma non ho capito quando mettere / oppure \ oppure il punto oppure il punto interrogativo,o il dollaro o questo: ^
    E' una guida di php.net ma non spiega tutto quello che scrive.
    Mi servirebbe per validare gli url di youtube, come questo www.youtube.com/watch?v= e poi il resto che cambia da video a video

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    \ è un carattere di escape, va messo davanti ai modificatori per farli risultare un normale carattere.
    Ad esempio . vuol dire "qualunque cosa", \. vuol dire "il carattere punto"

    / si usa per specificare il pattern e ne delimita l'inizio e la fine, se vuoi invece dire "il carattere /" devi scrivere \/ per questo per http:// dovrai scrivere http:\/\/

    Il ? indica che il carattere o gruppo di caratteri che lo precede è indifferente che ci sia o no, anche qui, se vuoi indicare il carattere ? dovrai scrivere \?

    ^ indica che il pattern che stai cercando deve essere all'inizio della stringa e non in un punto qualsiasi

  3. #3
    Di guide in rete ce ne sono molte che spiegano le regex
    Per youtube ho trovato questa regex che sembra ottima:
    Codice PHP:
    if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i'$url$match)) {
        
    $video_id $match[1];

    Prende tutti gli id dei video (questo credo ti serve no?) in tutte le forme possibili tipo:

    http://youtu.be/dQw4w9WgXcQ ...
    http://www.youtube.com/embed/dQw4w9WgXcQ ...
    http://www.youtube.com/watch?v=dQw4w9WgXcQ ...
    http://www.youtube.com/?v=dQw4w9WgXcQ ...
    http://www.youtube.com/v/dQw4w9WgXcQ ...
    http://www.youtube.com/e/dQw4w9WgXcQ ...
    http://www.youtube.com/user/username#p/u/11/dQw4w9WgXcQ ...
    http://www.youtube.com/sandalsResort.../0/dQw4w9WgXcQ ...
    http://www.youtube.com/watch?feature...&v=dQw4w9WgXcQ ...
    http://www.youtube.com/?feature=play...&v=dQw4w9WgXcQ ...

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    104
    Originariamente inviato da fdisotto
    Di guide in rete ce ne sono molte che spiegano le regex
    Per youtube ho trovato questa regex che sembra ottima:
    Codice PHP:
    if (preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i'$url$match)) {
        
    $video_id $match[1];

    Prende tutti gli id dei video (questo credo ti serve no?) in tutte le forme possibili tipo:

    http://youtu.be/dQw4w9WgXcQ ...
    http://www.youtube.com/embed/dQw4w9WgXcQ ...
    http://www.youtube.com/watch?v=dQw4w9WgXcQ ...
    http://www.youtube.com/?v=dQw4w9WgXcQ ...
    http://www.youtube.com/v/dQw4w9WgXcQ ...
    http://www.youtube.com/e/dQw4w9WgXcQ ...
    http://www.youtube.com/user/username#p/u/11/dQw4w9WgXcQ ...
    http://www.youtube.com/sandalsResort.../0/dQw4w9WgXcQ ...
    http://www.youtube.com/watch?feature...&v=dQw4w9WgXcQ ...
    http://www.youtube.com/?feature=play...&v=dQw4w9WgXcQ ...
    ma le variabili alla fine del codice ( $match e $url ) a cosa corrispondono?
    cioè io vorrei fare un form di questo tipo:
    Codice PHP:
    <?
    $url 
    $_POST[url];
    ?>
    <form action="espressioni.php" method="POST">
    <input type="text" name="url">
    <input type="submit" value="Vai">
    </form>
    <?
    if (preg_match('%(?:youtube(?:-nocookie)?.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu.be/)([^"&?/ ]{11})%i',$url,$match)) {
    $video_id $match[1]; 
         echo 
    "$video_id
    "
    ;
         echo 
    "Indirizzo valido";
    } else{ 
      echo 
    "Indirizzo non valido"

    ?>
    sarebbe giusto?

  5. #5
    Si esatto.
    Perché $url contiene l'url del video, mentre $match contiene appunto i match trovati, sarebbe un array.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    104
    Originariamente inviato da fdisotto
    Si esatto.
    Perché $url contiene l'url del video, mentre $match contiene appunto i match trovati, sarebbe un array.
    grazie per aver risposto,ora che ho capito funziona tutto,ma ho un ultima domanda,spero di non essere troppo esigente.Ho una pagina che con una if verifica se il link che è stato inviato è vuoto oppure no,quindi se è vuoto visualizza un errore,
    facendo:
    if (codice che verifica se è vuoto) {
    echo "è vuoto";
    } else {
    echo caricato con successo;


    Posso fare in modo che una volta che ha verificato che non è vuoto,se non è vuoto,verifichi che si tratta di un link di youtube con il codice che mi hai dato tu?
    e nel caso sia valido lo carichi...

  7. #7
    Per vuoto presumo tu intenda che non è stato inviato nulla, quindi potresti fare:
    Codice PHP:
    if (empty($_POST['link'])) {
    //Messaggio di errore
    } elseif (codicechecontrollayoutube) {
    //E' un link di youtube e facci ciò che vuoi
    } else {
    //Non è un link di youtube


  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    104

    Grazie

    Originariamente inviato da fdisotto
    Per vuoto presumo tu intenda che non è stato inviato nulla, quindi potresti fare:
    Codice PHP:
    if (empty($_POST['link'])) {
    //Messaggio di errore
    } elseif (codicechecontrollayoutube) {
    //E' un link di youtube e facci ciò che vuoi
    } else {
    //Non è un link di youtube

    Grazie,funziona tutto

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    104
    Originariamente inviato da fdisotto
    Per vuoto presumo tu intenda che non è stato inviato nulla, quindi potresti fare:
    Codice PHP:
    if (empty($_POST['link'])) {
    //Messaggio di errore
    } elseif (codicechecontrollayoutube) {
    //E' un link di youtube e facci ciò che vuoi
    } else {
    //Non è un link di youtube

    Ei,mi sorge un ultimo problema e poi non disturberò più |GIURO|
    allora,ti allego lo script
    Codice PHP:
    <?
     $linkdelvideo 
    $_POST['linkdelvideo'];
    if (empty(
    $linkdelvideo)) {

    echo 
    ' <form action="insertlink.php" method="POST">
        <input type="text" name="linkdelvideo"> 
        <input type="submit" value="Vai"> 
        </form>'
    ;
        echo 
    "Non hai inserito il link";
     
    $con mysql_connect("...","...","...");
     if (!
    $con)
       {
       die(
    'Could not connect: ' mysql_error());
       }
     
    mysql_select_db("..."$con);
     
    $result mysql_query("SELECT * FROM video");
     
    while(
    $row mysql_fetch_array($result))
       {
        
    $suddivisa $row['linkdelvideo'];
     
    $suddivisa explode("v=""$suddivisa"); 
      
    $primopezzourl $suddivisa[0]; 
      
    $secondopezzourl $suddivisa[1]; ?><?
       
    echo $secondopezzourl
    "
    ;
       echo 
    "
    "
    ;
       echo 
    '<object width="300" height="168.75"> 
      <param name="movie" value="https://www.youtube.com/v/'
    .$secondopezzourl.'?version=3"></param>
       <param name="allowFullScreen" value="true"></param> 
      <param name="allowScriptAccess" value="always"></param> 
      <embed src="https://www.youtube.com/v/'
    .$secondopezzourl.'?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="300" height="168.75"></embed>
     </object>
    '

    }
    elseif (
    preg_match('%(?:youtube(?:-nocookie)?.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu.be/)([^"&?/ ]{11})%i',$linkdelvideo,$match)) {
    $con mysql_connect("...","...","...");
     if (!
    $con)
       {
       die(
    'Could not connect: ' mysql_error());
       }
     
    mysql_select_db("..."$con);
     
    $sql="INSERT INTO video (linkdelvideo)
     VALUES
     ('
    $_POST[linkdelvideo]')";
     
    if (!
    mysql_query($sql,$con))
       {
       die(
    'Error: ' mysql_error());
       }
     
    mysql_close($con);
    header("location: prova.php");
     exit;
    } else {
    echo 
    ' <form action="insertlink.php" method="POST">
        <input type="text" name="linkdelvideo"> 
        <input type="submit" value="Vai"> 
        </form>'
    ;
        echo 
    "Non hai inserito un URL che fa riferimento ad un video di Youtube";
     
    $con mysql_connect("...","...","...");
     if (!
    $con)
       {
       die(
    'Could not connect: ' mysql_error());
       }
     
    mysql_select_db(".."$con);
     
    $result mysql_query("SELECT * FROM video");
     
    while(
    $row mysql_fetch_array($result))
       {
        
    $suddivisa $row['linkdelvideo'];
     
    $suddivisa explode("v=""$suddivisa"); 
      
    $primopezzourl $suddivisa[0]; 
      
    $secondopezzourl $suddivisa[1]; ?><?
       
    echo $secondopezzourl
    "
    ;
       echo 
    "
    "
    ;
       echo 
    '<object width="300" height="168.75"> 
      <param name="movie" value="https://www.youtube.com/v/'
    .$secondopezzourl.'?version=3"></param>
       <param name="allowFullScreen" value="true"></param> 
      <param name="allowScriptAccess" value="always"></param> 
      <embed src="https://www.youtube.com/v/'
    .$secondopezzourl.'?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="300" height="168.75"></embed>
     </object>
    '

    }
     
    ?>
    ora,nella prima pagina (no spam) www.voltaathome.altervista.org/prova.php i video vengono estratti dal database (non il video ma il link) e visualizzati attraverso una piccola modifica alla API fornita da youtube stesso. Il problema è l'altra pagina,ho copiato e incollato il codice di estrazione dei link e di visualizzazione e sono corretti per forza,solo che non accade niente,ho provato a fare in modo che in ogni caso vengano visualizzati,ma come potrai vedere dalla pagina che ho linkato non accade nulla.Dove ho sbagliato?

  10. #10
    Quello che ti posso consigliare è di fare debug tramite gli echo, ovvero metti gli echo in varie parti e vedi fin dove il codice si esegue, perché così mi viene difficile trovare i problemi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.