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