匹配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>