匹配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并不严格。
 $(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>