• User Attivo

    Espressione regolare. Come si individuano i domini di terzo livello?

    Ciao ragazzi,

    ho questa espressione regolare in JavaScript:

    
    var url_reg_exp = /^http:\/\/(www\.)?[a-zA-Z0-9-]{3,}\.[a-zA-Z]{2,}?$/;
    
    

    Funziona bene per validare l'URL immesso in un form. Il problema è che funziona solo con domini del tipo www . dominio .it.
    Come fare per fare in modo che riconosca anche domini di terzo livello come ad esempio nome_sotto_dominio . dominio .it?

    Grazie a tutti :gthi:


  • User Attivo

    Io scomoderei le regex per cose più complicate... PHP per le cose più basilari, come email, url, ed altro, ha funzioni pre-integrate che sprecano anche meno memoria.

    [php]
    <?php
    $url = "h t t p:// it. wikipedia.org";
    if (filter_var($url, FILTER_VALIDATE_URL)) echo "URL valido";
    else echo "URL non valido";
    ?>
    [/php]


  • User Attivo

    Buono a sapersi Francesco, il problema è che quella è una funzione PHP. A me serve qualcosa in JavaScript 🙂 Suggerimenti?


  • User Attivo

    Hahahahaha, credevo di essere nel forum PHP, perdonami! 😄

    Prova questa:

    
    var espressione = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
    var regex = new RegExp(expression);
    var url = 'h t t p : / / miao.bau.com';
    if (url.match(regex)) {
        alert("valido");
    } else {
        alert("non valido");
    }
    
    

  • User Attivo

    Ottimo, grazie 😄
    Ho fatto comunque una modifica per obbligare l'utente ad inserire il prefisso http : // prima del dominio del sito. E' corretto se faccio così?

     /^http:\/\/[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi; 
    

    A me sembra funzionare. Me lo confermi?
    Inoltre, come posso fare per evitare che alla fine dell'indirizzo non venga messo lo slash? Ad esempio non voglio che sia itPUNTO wikipedia PUNTO orgSLASH ma voglio che sia itPUNTO wikipedia PUNTO org. Qualche consiglio in merito?

    Grazie ancora 🙂


  • User Attivo

    Penso di aver risolto così

    /^http :\/\/[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}?$/;
    

    Qualcuno mi può confermare che sia tutto corretto? (Ovviamente bisogna eliminare lo spazio che sono stato costretto ad inserire ora tra http : ...)