2010-04-08 16 views
9

una stringa del tipo: "www.test.com" è buona. una stringa del tipo: 'www.888.com' è buona. una stringa come: 'stackoverflow.com' è buona. una stringa come: "GOoGle.Com" è buona.Caratteri URL validi. java per convalidare

perché? perché quelli sono url validi. non importa se sono stati registrati o meno.

ora cattivi stringhe sono:

'GOOG * d \ x' 'manydots ... com'

perché, perché non è possibile registrare tali URL.

se ho una stringa in java che dovrebbe essere un buon URL qual è il modo migliore per convalidarlo?

grazie mille

+0

possibile duplicato di [Come verificare un URL valido in Java?] (Http://stackoverflow.com/questions/2230676/how-to-check-for-a-valid-url-in-java) –

risposta

3

Questi esempi sono nomi host. Non sono URL validi di per sé.

I nomi degli host sono costituiti da . "etichette" separate. Ogni etichetta deve contenere fino a 63 caratteri di lettere, cifre e trattini, ma un trattino non deve essere il primo o l'ultimo carattere. È facoltativo seguire l'intero nome host con un altro punto.

È possibile abbinare questo con un modello come (assumendo-insensitive caso):

([a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9])(\.[a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9])*\.? 

Tuttavia, questo corrisponde stringhe come 1.2.3.4 pure, che anche se tecnicamente potrebbero essere host/dominio nomi saranno in realtà agiscono come diretta Indirizzi IP Potresti volerlo permettere. Se lo fai, potresti anche voler consentire gli indirizzi IPv6, che sono esadecani separati da due punti; quando sono incorporati in un URL, hanno anche parentesi quadre intorno a loro.

E poi ovviamente c'è IDNA. Al giorno d'oggi, 例え.テスト è un nome di dominio IDNA valido, corrispondente a xn--r8jz45g.xn--zckzah. Se vuoi consentire quelli hai bisogno di un supporto Unicode.

Riassunto: è un po 'più difficile di quanto si possa pensare. E questo è solo il nome dell'host. 'Convalidare' un intero URL è ancora più lavoro. Una semplice regex non ha intenzione di hackerarlo. Utilizzare una libreria preesistente.

+0

grazie bobince. quello era davvero ciò che stavo cercando. – Chez

9

uso UrlValidator dal Apache Commons library. pacchetto binario: http://www.mirrorservice.org/sites/ftp.apache.org/commons/validator/binaries/commons-validator-1.3.1.zip (zip contiene i file .jar)

Esempio di utilizzo (Costruire un UrlValidator con schemi validi di "http", e "https"):

String[] schemes = {"http","https"}. 
UrlValidator urlValidator = new UrlValidator(schemes); 
if (urlValidator.isValid("ftp://foo.bar.com/")) { 
    System.out.println("url is valid"); 
} else { 
    System.out.println("url is invalid"); 
} 

stampe "URL non è valido"

Se invece viene utilizzato il costruttore predefinito.

UrlValidator urlValidator = new UrlValidator(); 
if (urlValidator.isValid("ftp://foo.bar.com/")) { 
    System.out.println("url is valid"); 
} else { 
    System.out.println("url is invalid"); 
} 

stampe fuori "URL è valido"

0

Credo che new URL(yourString) farà il trucco: si suppone per aumentare MalformedURLException se l'URL non è conforme (in realtà su API Java si dice se previsto dalla stringa un protocollo sconosciuto, ma si può provare comunque):

try 
{ 
    new URL(string); 
} catch (MalformedURLException e) { 
    //do whatever 
} 
+3

Il problema con l'URL è, tenterà di eseguire una ricerca ogni volta :( – OscarRyz

+0

Sì, è vero, ma in quale altro modo (eccetto l'uso di espressioni regolari) puoi convalidare un url? –

+1

@Shervin: Con Commons UrlValidator. – BalusC

-1

si può fare questo tipo di "validazione url" attraverso Regular Expressions.

E here è dove è possibile ottenere una buona regex di URL (in modo da non dover scrivere il proprio).

0

Credo anche si può usare il URL in java.net

URL url = new URL("www.google.com"); 

l'API dice public URL(String spec) throws MalformedURLException Parameters: spec - the String to parse as a URL. Throws: MalformedURLException - If the string specifies an unknown protocol.

Quindi viene generata un'eccezione se l'URL non è valido.

+0

Questo non funziona http: //S tackoverflow.com/questions/1600291/validating-url-in-java/5965755#5965755 – Martin

Problemi correlati