Qual è una buona espressione regolare per abbinare un URL?

Attualmente ho una casella di input che rileverà l’URL e analizzerà i dati.

Quindi adesso sto usando:

var urlR = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+) (?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; var url= content.match(urlR); 

Il problema è che quando inserisco un URL come www.google.com , non funziona. quando ho inserito http://www.google.com , sta funzionando.

Non sono molto fluente nelle espressioni regolari. Qualcuno può aiutarmi?

Regex se vuoi garantire che l’URL inizi con HTTP / HTTPS:

 https?:\/\/(www\.)?[[email protected]:%._\+~#=]{2,256}\.[az]{2,6}\b([[email protected]:%_\+.~#?&//=]*) 

Se non si richiede il protocollo HTTP:

 [[email protected]:%._\+~#=]{2,256}\.[az]{2,6}\b([[email protected]:%_\+.~#?&//=]*) 

Per provare questo, vedi http://regexr.com?37i6s , o per una versione meno restrittiva http://regexr.com/3e6m0 .

Esempio di implementazione JavaScript:

 var expression = /[[email protected]:%_\+.~#?&//=]{2,256}\.[az]{2,4}\b(\/[[email protected]:%_\+.~#?&//=]*)?/gi; var regex = new RegExp(expression); var t = 'www.google.com'; if (t.match(regex)) { alert("Successful match"); } else { alert("No match"); } 
 (https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9]\.[^\s]{2,}) 

Corrisponde ai seguenti casi

  • http://www.foufos.gr
  • https://www.foufos.gr
  • http://foufos.gr
  • http://www.foufos.gr/kino
  • http://www.t.co
  • http://t.co
  • http://werer.gr
  • www.foufos.gr
  • www.mp3.com
  • www.t.co

NON corrisponde al seguente

  • www.foufos
  • http://www.foufos
  • http://foufos
  • www.mp3#.com
  • www.foufos-.gr
  • www.-foufos.gr

Controllalo in rubulare – NUOVA versione

Controllalo in rubulare – vecchia versione

Questi sono i droidi che stai cercando. Questo è preso da validator.js che è la libreria che dovresti veramente usare per farlo. Ma se vuoi tirare il tuo, chi sono io per fermarti? Se vuoi una regex pura, puoi semplicemente prendere il controllo della lunghezza. Penso che sia una buona idea testare la lunghezza dell’URL se si vuole veramente determinare la conformità con le specifiche.

  function isURL(str) { var urlRegex = '^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)[email protected])?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-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,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$'; var url = new RegExp(urlRegex, 'i'); return str.length < 2083 && url.test(str); } 

Un’altra ansible soluzione, al di sopra della soluzione, non ha funzionato nell’analisi dei parametri della stringa di query.

 var regex = new RegExp("^(http[s]?:\\/\\/(www\\.)?|ftp:\\/\\/(www\\.)?|www\\.){1}([0-9A-Za-z-\\[email protected]:%_\+~#=]+)+((\\.[a-zA-Z]{2,3})+)(/(.)*)?(\\?(.)*)?"); if(regex.test("http://google.com")){ alert("Successful match"); }else{ alert("No match"); } 

In questa soluzione non esitate a modificare [-0-9A-Za-z\[email protected]:%_\+~#= , Per abbinare il dominio / il nome del dominio secondario. In questa soluzione vengono anche presi in considerazione i parametri della stringa di query.

Se non si utilizza RegEx , dall’espressione sostituire \\ by \ .

Spero che questo ti aiuti.

prova questo

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

Stavo cercando di mettere insieme alcuni JavaScript per convalidare un nome di dominio (ad esempio google.com) e se convalida abilita un pulsante di invio. Ho pensato che avrei condiviso il mio codice per coloro che stanno cercando di realizzare qualcosa di simile. Si aspetta un dominio senza http: // o www. valore. Lo script utilizza un’espressione regolare ridotta per la corrispondenza del dominio, che non è rigida sul TLD falso.

http://jsfiddle.net/nMVDS/1/

 $(function () { $('#whitelist_add').keyup(function () { if ($(this).val() == '') { //Check to see if there is any text entered //If there is no text within the input, disable the button $('.whitelistCheck').attr('disabled', 'disabled'); } else { // Domain name regular expression var regex = new RegExp("^([0-9A-Za-z-\\[email protected]:%_\+~#=]+)+((\\.[a-zA-Z]{2,3})+)(/(.)*)?(\\?(.)*)?"); if (regex.test($(this).val())) { // Domain looks OK //alert("Successful match"); $('.whitelistCheck').removeAttr('disabled'); } else { // Domain is NOT OK //alert("No match"); $('.whitelistCheck').attr('disabled', 'disabled'); } } }); }); 

FORM HTML: