2010-04-08 16 views
9

una cadena como: 'www.test.com' es buena. una cadena como: 'www.888.com' es buena. una cadena como: 'stackoverflow.com' es buena. una cadena como: 'GOoGle.Com' es buena.URL caracteres válidos. java para validar

¿por qué? porque esas son URLs válidas. no importa si han sido registrados o no.

ahora cadenas malas son:

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

por qué, porque no se puede registrar las direcciones URL.

si tengo una cadena en java que se supone que es una buena url ¿cuál es la mejor manera de validarlo?

muchas gracias

+0

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) –

Respuesta

3

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.

+0

gracias bobince. eso era realmente lo que buscaba. – Chez

9

uso UrlValidator del Apache Commons library. paquete binario: http://www.mirrorservice.org/sites/ftp.apache.org/commons/validator/binaries/commons-validator-1.3.1.zip (ZIP contiene los archivos .jar)

Ejemplo de uso (Construir un UrlValidator con esquemas válidos de "http" y "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"); 
} 

grabados "URL no es válido"

Si, en cambio, se utiliza el constructor predeterminado.

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

imprime "url es válida"

0

Creo que new URL(yourString) hará el truco: se supone elevar MalformedURLException si la URL no es compatible (en realidad en la API de Java que dice si está previsto por cuerda un protocolo desconocido, pero puede intentarlo de todos modos):

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

El problema con la URL es que intentará realizar una búsqueda cada vez :( – OscarRyz

+0

Sí, eso es cierto, pero ¿cómo puede otra cosa (excepto usar regex) validar una url? –

+1

@Shervin: Con Commons UrlValidator. – BalusC

-1

usted puede hacer este tipo de "validación de la URL" a través de Regular Expressions.

Y here es donde puedes obtener algunas buenas expresiones regulares de URL (para que no tengas que escribir las tuyas).

0

También creo que se puede utilizar el URL en java.net

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

la 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.

Así se produce una excepción si el URL no es válida.

+0

Esto no funciona. http: // s tackoverflow.com/questions/1600291/validating-url-in-java/5965755#5965755 – Martin

Cuestiones relacionadas