Um dos desafios no Java que encontrei foi a de validar URL. Ok, antes que fale "use a biblioteca do Apache", no meu caso, era um que não era viável, precisava ser Java puro, sem bibliotecas externas. Entretanto, validar a URL, como disse, não é fácil. Um bom validador de URL tem um RegExp enorme se for seguir as normas, e os RegExp mais simples, acabam rejeitando muitas URL válidas (a maioria se esquece que nem todos os sites são .com, .net ou .org, mas que também existe o .co, entre outras).
Entretanto, achei um jeito no Java que valida todas as possíveis e rejeita pelo menos os erros mais comuns: ok, é uma gambiarra, mas funciona:
01. String urlEntry="http://foo.com/blah_blah";
02. boolean ok = true;
03. try {
04. URL url = new URL(urlEntry);
05. url.toURI();
06. } catch (MalformedURLException | URISyntaxException ex) {
07. ok=false;
08. }
Basicamente o que fiz foi a partir de uma string, crio uma URL. Ao criar a URL, se a string estiver mal formado, ele vai gerar uma MalformedURLException. Entretanto, ele aceita algumas URL inválidas, mas, se você tentar converter para URI, acaba dando o URISyntaxException.
O Curioso é que pela norma RFC 2396, que normaliza o que é URI, toda URL é uma URI (mas nem todo URI é uma URL), então porque será que o Java aceita uma URL, sendo que se ele não é uma URI válida, o mesmo não deveria ser para URL?
Nenhum comentário:
Postar um comentário