Expressão regular para validação de URL (em JavaScript)

Alguém tem um regex para validar urls (NÃO para encontrá-los dentro de uma passagem de texto)? O snippet JavaScript seria preferido.

A syntax real da URL é bastante complicada e não é fácil de representar na regex. A maioria dos regexes de aparência simples por aí dará muitos falsos negativos e falsos positivos. Veja por diversão esses esforços, mas até mesmo o resultado final não é bom.

Além disso, hoje em dia você geralmente deseja permitir o IRI, bem como o URI antigo, para que possamos vincular a endereços válidos como:

http://en.wikipedia.org/wiki/Þ http://例え.テスト/ 

Eu iria apenas para verificações simples: começa com um método conhecido: nome? É livre de espaços e de aspas duplas? Se sim, então inferno, provavelmente é bom o suficiente.

Na resposta aceitada, Bobince acertou: validar apenas o nome do esquema,: //, e espaços e aspas duplas geralmente são suficientes. Aqui está como a validação pode ser implementada em JavaScript:

 var url = 'http://www.google.com'; var valid = /^(ftp|http|https):\/\/[^ "]+$/.test(url); // true 

ou

 var r = /^(ftp|http|https):\/\/[^ "]+$/; r.test('http://www.goo le.com'); // false 

ou

 var url = 'http:www.google.com'; var r = new RegExp('/^(ftp|http|https):\/\/[^ "]+$/'); r.test(url); // false 

Referências para syntax:

  • Objeto RegExp MDN
  • Objeto RegExp W3Schools

Experimente esta regex

 /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ 

Isso funciona melhor para mim.

   URL    URL :     

Eu encontrei algum sucesso com isso:

 /^((ftp|http|https):\/\/)?www\.([Az]+)\.([Az]{2,})/ 
  • Ele verifica um ou nenhum dos seguintes: ftp: //, http: // ou https: //
  • Requer www.
  • Ele verifica qualquer número de caracteres válidos.
  • Finalmente, ele verifica se tem um domínio e se esse domínio tem pelo menos dois caracteres.

Obviamente não é perfeito, mas lidou bem com os meus casos

tente com isso:

  var RegExp =/^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[az\u00a1-\uffff0-9]+-?)*[az\u00a1-\uffff0-9]+)(?:\.(?:[az\u00a1-\uffff0-9]+-?)*[az\u00a1-\uffff0-9]+)*(?:\.(?:[az\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/i; 
 /(?:http[s]?\/\/)?(?:[\w\-]+(?::[\w\-]+)?@)?(?:[\w\-]+\.)+(?:[az]{2,4})(?::[0-9]+)?(?:\/[\w\-\.%]+)*(?:\?(?:[\w\-\.%]+=[\w\-\.%!]+&?)+)?(#\w+\-\.%!)?/ 

Tente isso, funciona para mim:

  /^(http[s]?:\/\/){0,1}(w{3,3}\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/; 

Eu uso a expressão regular / ^ [az] +: [^:] + $ / i para validação de URL. Veja um exemplo do meu código InputKeyFilter entre navegadores com validação de URL.

    Input Key Filter Test          URL:   New URL:    

Experimente este regex , funciona para mim:

 function isUrl(s) { var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ return regexp.test(s); } 

Depois de uma longa pesquisa, construo esta expressão reg. Espero que ajude os outros também …….

 url = 'https://google.co.in'; var re = /[a-z0-9-\.]+\.[az]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/; if (!re.test(url)) { alert("url error"); return false; }else{ alert('success') }