Que caracteres tornam um URL inválido?
Estes são URLs válidos?
*example.com/file[/].html
http://example.com/file[/].html
Em geral, URIs como definidas por RFC 3986 (ver Secção 2: Caracteres) podem conter qualquer um dos seguintes 84 caracteres:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=
Note que esta lista não't declara onde no URI estes caracteres podem ocorrer.
Qualquer outro caractere precisa ser codificado com a codificação percentual (%
*hh
**). Cada parte do URI tem mais restrições sobre quais caracteres precisam ser representados por uma palavra codificada por porcentagem.
Todos os caracteres validos que podem ser usados em um URI (um URL é um tipo de URI) são definidos em RFC 3986.
Todos os outros caracteres podem ser usados em uma URL desde que sejam "URL Codificado" primeiro. Isso envolve alterar o caracter inválido para "codes" (geralmente na forma do símbolo de porcentagem (%) seguido por um número hexadecimal).
Este link, HTML URL Encoding Reference, contém uma lista das codificações para caracteres inválidos.
Não é realmente uma resposta à sua pergunta, mas validar url's é realmente um sério p.i.t.a Você'é provavelmente melhor validar o nome do domínio e deixar a consulta parte da url ser. Essa é a minha experiência. Você também poderia recorrer a pingar a url e ver se resulta numa resposta válida, mas isso pode ser demais para uma tarefa tão simples.
Expressões regulares para detectar url's são abundantes, pesquisar no google it :)