Estos ejemplos son nombres de host. No son URL válidas en sí mismas.
Los nombres de host están hechos de .
-separados 'etiquetas'. Cada etiqueta debe tener hasta 63 caracteres de letras, dígitos y guiones, pero un guión no debe ser el primero ni el último. Es opcional seguir todo el nombre de host con otro punto.
Puede hacer coincidir esto con un patrón como (suponiendo entre mayúsculas y minúsculas):
([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])*\.?
Sin embargo, esto coincide con cadenas como 1.2.3.4
, así, que a pesar de que técnicamente podrían ser anfitrión/Dominio nombres serán en realidad actúan como directa Direcciones IP. Es posible que desee permitir eso. Si lo hace, también puede querer permitir direcciones IPv6, que son hex hexadecimal; cuando están incrustados en una URL, también tienen corchetes a su alrededor.
Y luego, por supuesto, está IDNA. Hoy en día, 例え.テスト
es un nombre de dominio IDNA válido, correspondiente al xn--r8jz45g.xn--zckzah
. Si quiere permitirlos, necesitará un poco de ayuda de Unicode.
Resumen: es un poco más difícil de lo que piensas. Y solo son nombres de host. 'Validar' toda una URL es aún más trabajo. Una expresión regular simple no va a piratearla. Use una biblioteca preexistente.
posible duplicado de [¿Cómo comprobar si hay una URL válida en Java?] (Http://stackoverflow.com/questions/2230676/how-to-check-for-a-valid-url-in-java) –