Expression régulière pour la validation d'URL (en JavaScript)

Est-ce que quelqu'un a un regex pour valider des URL (PAS pour les trouver dans un passage de texte)? L'extrait de JavaScript serait préféré.

La syntaxe de l'URL réelle est assez compliquée et pas facile à représenter dans regex. La plupart des regexes simples semblent offrir de nombreux faux négatifs ainsi que des faux positifs. Voyez pour amuser ces efforts, mais même le résultat final n'est pas bon.

De plus, ces jours-ci, vous voudrez généralement autoriser IRI aussi bien que URI de la vieille école, afin que nous puissions lier des adresses valides comme:

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

Je n'irais que pour des contrôles simples: ça commence par une méthode bien connue: nom? Est-ce exempt d'espaces et de doubles guillemets? Si c'est le cas, alors, il est probablement assez bon.

Dans la réponse acceptée, Bobince a réussi: la validation du nom du programme, //, et les espaces et les guillemets doubles sont généralement suffisants. Voici comment la validation peut être implémentée en 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 

Références pour la syntaxe:

  • Objet MDN RegExp
  • W3Schools RegExp Object

Essayez cette regex

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

Cela me convient le mieux.

 <html> <head> <title>URL</title> <script type="text/javascript"> function validate() { var url = document.getElementById("url").value; var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; if (pattern.test(url)) { alert("Url is valid"); return true; } alert("Url is not valid!"); return false; } </script> </head> <body> URL : <input type="text" name="url" id="url" /> <input type="submit" value="Check" onclick="validate();" /> </body> </html> 

J'utilise l'expression régulière / ^ [az] +: [^:] + $ / i pour la validation de l'URL. Voir un exemple de mon code InputKeyFilter cross-browser avec validation URL.

 <!doctype html> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Input Key Filter Test</title> <meta name="author" content="Andrej Hristoliubov [email protected]"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <!-- For compatibility of IE browser with audio element in the beep() function. https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible --> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css"> <script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script> <script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script> </head> <body> URL: <input type="url" id="Url" value=":"/> <script> CreateUrlFilter("Url", function(event){//onChange event inputKeyFilter.RemoveMyTooltip(); var elementNewInteger = document.getElementById("NewUrl"); elementNewInteger.innerHTML = this.value; } //onblur event. Use this function if you want set focus to the input element again if input value is NaN. (empty or invalid) , function(event){ this.ikf.customFilter(this); } ); </script> New URL: <span id="NewUrl"></span> </body> </html> 

Essayez avec ceci:

  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+\-\.%!)?/ 

J'ai trouvé un certain succès avec ceci:

 /^((ftp|http|https):\/\/)?www\.([Az]+)\.([Az]{2,})/ 
  • Il vérifie l'un ou l'autre des éléments suivants: ftp: //, http: // ou https: //
  • Cela requiert www.
  • Il vérifie tout nombre de caractères valides.
  • Enfin, il vérifie qu'il possède un domaine et que ce domaine comporte au moins 2 caractères.

C'est évidemment pas parfait, mais il a bien géré mes affaires

Essayez cette regex , cela fonctionne pour moi:

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

Après une longue recherche, je crée cette expression reg. J'espère que cela aidera les autres aussi …

 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') }