2010-10-14 17 views

risposta

40

Si può provare a creare un oggetto java.net.URL. Se non si tratta di un URL appropriato, verrà lanciato un MalformedURLException.

+2

Giusto per essere chiari , genererebbe solo una MalformedURLException 'se non viene specificato alcun protocollo o viene trovato un protocollo sconosciuto '. A differenza di UrlValidator di Apache, non viene eseguita alcuna convalida aggiuntiva. – dogbane

+0

Effettua anche altri controlli, ad es. numeri di porta. – Grodriguez

+0

L'ho citato dal javadocs http://download.oracle.com/javase/6/docs/api/java/net/URL.html. Non dichiarano altri assegni. – dogbane

34

È possibile utilizzare UrlValidator da commons-validator. Ti eviterà di scrivere codice in cui il flusso logico è guidato dalla memorizzazione nella cache di un'eccezione, che è generalmente considerata una cattiva pratica. In questo caso, però, penso che sia bene fare come altri hanno suggerito, se si sposta questa funzionalità a un metodo di utilità chiamato isValidUrl(..)

+0

+1 per essere diversi :) – willcodejavaforfood

+0

non è necessario duplicare le risposte degli altri;) – Bozho

+0

non consentirà i caratteri di sottolineatura nel nome host –

6

complemento risposta Bozho, di andare più pratico:

  1. Scarica Apache Commons package e decomprimilo. binaries
  2. Include commons-validator-1.4.0.jar nel percorso di configurazione java.
  3. prova con questo codice di esempio (reference):

    //...your imports 
    
    import org.apache.commons.validator.routines.*; // Import routines package! 
    
    public static void main(String[] args){ 
    
    // Get an UrlValidator 
    UrlValidator defaultValidator = new UrlValidator(); // default schemes 
    if (defaultValidator.isValid("http://www.apache.org")) { 
        System.out.println("valid"); 
    } 
    if (!defaultValidator.isValid("http//www.oops.com")) { 
        System.out.println("INvalid"); 
    } 
    
    // Get an UrlValidator with custom schemes 
    String[] customSchemes = { "sftp", "scp", "https" }; 
    UrlValidator customValidator = new UrlValidator(customSchemes); 
    if (!customValidator.isValid("http://www.apache.org")) { 
        System.out.println("valid"); 
    } 
    
    // Get an UrlValidator that allows double slashes in the path 
    UrlValidator doubleSlashValidator = new UrlValidator(UrlValidator.ALLOW_2_SLASHES); 
    if (doubleSlashValidator.isValid("http://www.apache.org//projects")) { 
        System.out.println("INvalid"); 
    } 
    
  4. Run/Debug

8

Se si programma in Android, è possibile utilizzare android.webkit.URLUtil per testare.

URLUtil.isHttpUrl(url) 
URLUtil.isHttpsUrl(url) 

Spero che sarebbe utile.

+7

Questo in realtà non verifica se è un URL controlla solo se c'è http: // all'inizio, ciò di cui hai bisogno è URLUtil.isValidUrl (url) –

+0

Quick heads up che si chiama URLUtil ... non URLUtil * S *. – Tommie

-1

Questa funzione convalida un URL e restituisce true (URL valido) o falso (URL non valido).

public static boolean isURL(String url) { 
    try { 
     new URL(url); 
     return true; 
    } catch (Exception e) { 
     return false; 
    } 
} 

Assicurarsi di import java.net.URL;

6

per Android è sufficiente aggiungere questa linea:

boolean isValid = URLUtil.isValidUrl("your.uri"); 
5

Qui si va:

public static boolean isValidURL(String urlString) 
{ 
    try 
    { 
     URL url = new URL(urlString); 
     url.toURI(); 
     return true; 
    } catch (Exception exception) 
    { 
     return false; 
    } 
} 
2

Per Spring Framework utenti. C'è: org.springframework.util.ResourceUtils#isUrl

Eg

ResourceUtils.isUrl("https://stackoverflow.com/"); 
Problemi correlati