匹配URL的正则expression式是什么?

目前我有一个input框,它将检测URL并parsing数据。

所以现在我正在使用:

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

问题是,当我input像www.google.com这样的url时,它不起作用。 当我进入http://www.google.com ,它正在工作。

我在正则expression式中不太stream利。 任何人都可以帮我吗?

正则expression式,如果你想确保URL以HTTP / HTTPS启动:

 https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[az]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*) 

如果你不需要HTTP协议:

 [-a-zA-Z0-9@:%._\+~#=]{2,256}\.[az]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*) 

要试用这个,请参阅http://regexr.com?37i6s ,或http://redgexr.com/3e6m0限制较less的版本。;

JavaScript实现示例:

 var expression = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[az]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/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,}) 

将匹配以下情况

  • 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

将不符合以下内容

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

检查它在rubular – 新版本

检查它在ruby – 旧版本

这些是你正在寻找的机器人。 这是来自validator.js这是你真的应该使用这个库。 但是如果你想自己动手,我是谁来阻止你呢? 如果你想纯粹的正则expression式,那么你可以拿出长度检查。 如果你真的想确定是否符合规范,我认为testingURL的长度是个好主意。

  function isURL(str) { var urlRegex = '^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[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); } 

上面的解决scheme的另一个可能的解决scheme失败了parsing查询string参数。

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

在这个解决scheme中,请随意修改[-0-9A-Za-z\.@:%_\+~#= ,以匹配域名/子域名。 在这个解决scheme查询string参数也照顾。

如果您不使用RegEx ,则从expression式replace\\ by \

希望这可以帮助。

尝试这个

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

我试图把一些JavaScript来validation一个域名(例如google.com),如果它validation启用一个提交button。 我以为我会分享我的代码为那些正在寻求完成类似的东西。 它期望没有任何http://或www的域名。 值。 该脚本使用从上面剥离下来的正则expression式进行域匹配,这对于伪造的TLD并不严格。

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-\\.@:%_\+~#=]+)+((\\.[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'); } } }); }); 

HTML格式:

 <form action="domain_management.php" method="get"> <input type="text" name="whitelist_add" id="whitelist_add" placeholder="domain.com"> <button type="submit" class="btn btn-success whitelistCheck" disabled='disabled'>Add to Whitelist</button> </form>