Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Validazione di una URL passata da form

    Salve ragazzi.
    Sto costruendomi tutta una serie di funzioni per validare i dati passati da una form e mi sono bloccato nella sintassi dell'espressione regolare per validare le URL.

    Sto usando il seguente pattern:

    Codice PHP:
    // $link contiene la URL passata dalla form
    $pattern "^((\http(s)?://)?(www\.)?[a-zA-Z0-9.#@:%&_?=~-]+)?\][a-zA-Z0-9.#@:%&_\?=~-/]+$/";

    if (
    preg_match($pattern$link)) {
        
    $link "$link ::: Indirizzo Valido";
    } else {
        
    $link "$link ::: Indirizzo NON Valido";

    Ma ottengo il seguente warning e la validazione non mi va a buon fine.
    Warning: preg_match(): No ending delimiter '^' found in c:\programmi\php\www\[prove]\funzioni filtro form\index.php on line xxx
    Dov'è che sbaglio?

    Peraltro.... ora che ci sono: nella stessa funzione volevo anche controllare (una volta che l'indirizzo è validato) che la URL esista davvero.
    Con PHP5 posso usare get_headers(), ma se volessi fare una funzione retrocompatibile anche per PHP4, come potrei fare???

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  2. #2
    Il primo carattere della regex diventerà il separatore, ergo il PHP cerca il ^ che termina la regex. Cambiandola come segue ti va in errore per altri motivi:

    codice:
    $pattern = "|^((http(s)?://)?(www.)?[a-zA-Z0-9.#@:%&_?=~-]+)?][a-zA-Z0-9.#@:%&_?=~-/]+$|"
    Ora il problema è che il - in fondo ti crea un range tra ~ e /
    Mettilo alla fine così non rompe:

    codice:
    $pattern = "|^((http(s)?://)?(www.)?[a-zA-Z0-9.#@:%&_?=~-]+)?][a-zA-Z0-9.#@:%&_?=~/-]+$|"
    Inoltre, c'è una quadra chiusa che mi puzza di boiata:

    codice:
    $pattern = "|^((http(s)?://)?(www.)?[a-zA-Z0-9.#@:%&_?=~-]+)?[a-zA-Z0-9.#@:%&_?=~/-]+$|"

  3. #3

    Re: Validazione di una URL passata da form

    Originariamente inviato da alcio74
    Peraltro.... ora che ci sono: nella stessa funzione volevo anche controllare (una volta che l'indirizzo è validato) che la URL esista davvero.
    Con PHP5 posso usare get_headers(), ma se volessi fare una funzione retrocompatibile anche per PHP4, come potrei fare???
    Quando hai problemi con php 4, fai un salto su Pear: c'è un pacchetto stracomodo che fornisce le funzioni PHP5 per PHP4:
    http://pear.php.net/package/PHP_Compat/docs/latest/

    Non dico di includere l'intero pacchetto: basta che vai nella documentazione per vedere come le hanno implementate per prendere spunti.

  4. #4
    Innanzi tutto, mille grazie per la regexp.
    Non so quante volte mi ci sono messo, ma credo che a questo punto non imparerò mai come costruirmi da solo la giusta sintassi di un pattern: sbaglio sempre qualcosa che mi manda in tilt.
    Solo una delucidazione: suppongo che quella giusta sia l'ultima, vero??

    Grazie anche per l'altro suggerimento.
    Darò un'occhiata al link che mi hai consigliato.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Anche la penultima funziona ma vedevo una quadra chiusa sospetta. Non ho analizzato a fondo la regex: dopo un pò ci perdo le diottrie...

  6. #6
    function isValidUrl($url) {
    return (bool)preg_match('/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}'.'((:[0-9]{1,5})?\/.*)?$/i' , $url);
    }


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  7. #7
    Beh... è proprio il caso di dire: troppa grazia Sant'Antonio!
    Grazie della collaborazione.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  8. #8
    Non so se può tornare utile a qualcuno, ma grazie al suggerimento di NTD (che ringrazio pubblicamente) ho trovato un bel po' di documentazione su PEAR.

    Sono quindi riuscito a completare la funzione che mi permette di sapere se un URL, una volta validato come sintassi, esiste o meno.

    Riporto entrambe le funzioni, sperando possano essere utili a qualcuno.

    Codice PHP:
    function exists_url_php4($str){
    /* SOLO PER PHP4*/

    $urlinfo parse_url($str);
    $port = isset($urlinfo['port']) ? $urlinfo['port'] : 80;

    $fp = @fsockopen ($urlinfo['host'], $port$errno$errstr100);
    if (!
    $fp) {
            return 
    FALSE;
    } else {
            return 
    TRUE;
    }
    fclose ($fp);
    }

    function 
    exists_url_php5($str){
    /* SOLO PER PHP5*/

    $headers_link get_headers($str);
        if (
    $headers_link[0] == "HTTP/1.1 200 OK") {
            return 
    TRUE;
        } else {
            return 
    FALSE;
        }

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9
    Originariamente inviato da alcio74
    Non so se può tornare utile a qualcuno, ma grazie al suggerimento di NTD (che ringrazio pubblicamente) ho trovato un bel po' di documentazione su PEAR.

    Sono quindi riuscito a completare la funzione che mi permette di sapere se un URL, una volta validato come sintassi, esiste o meno.

    Riporto entrambe le funzioni, sperando possano essere utili a qualcuno.

    Codice PHP:
    function exists_url_php4($str){
    /* SOLO PER PHP4*/

    $urlinfo parse_url($str);
    $port = isset($urlinfo['port']) ? $urlinfo['port'] : 80;

    $fp = @fsockopen ($urlinfo['host'], $port$errno$errstr100);
    if (!
    $fp) {
            return 
    FALSE;
    } else {
            return 
    TRUE;
    }
    fclose ($fp);
    }

    function 
    exists_url_php5($str){
    /* SOLO PER PHP5*/

    $headers_link get_headers($str);
        if (
    $headers_link[0] == "HTTP/1.1 200 OK") {
            return 
    TRUE;
        } else {
            return 
    FALSE;
        }

    Sempre se sei su PHP5 qui

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  10. #10
    Grazie del link.
    C'è del materiale veramente interessante!!!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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.