为了账号安全,请及时绑定邮箱和手机立即绑定

什么是匹配URL的好正则表达式?

/ 猿问

什么是匹配URL的好正则表达式?

什么是匹配URL的好正则表达式?

目前,我有一个输入框,它将检测URL并解析数据。

所以现在,我用的是:

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

问题是,当我输入一个URL时www.google.com它不起作用。当我进来的时候http://www.google.com它起作用了。

我的正则表达式不是很流利。有谁可以帮我?


查看完整描述

3 回答

?
POPMUISE

如果要确保URL以HTTP/HTTPS开头,请使用Regex:

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

如果不需要HTTP协议:

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

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

示例JavaScript实现:

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

}


查看完整回答
反对 回复 2019-06-10
?
慕村225694

(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://werer.gr

  • www.foufos.gr

  • www.mp3.com

  • www.t.co

  • http://t.co

  • http://www.t.co

  • https://www.t.co

  • www.aa.com

  • http://aa.com

  • http://www.aa.com

  • https://www.aa.com

将与以下内容不匹配

  • www.foufos

  • www.foufos-.gr

  • www.-foufos.gr

  • foufos.gr

  • http://www.foufos

  • http://foufos

  • www.mp3#.com

var expression = /(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,})/gi;

var regex = new RegExp(expression);


var check = [

  'http://www.foufos.gr',

  'https://www.foufos.gr',

  'http://foufos.gr',

  'http://www.foufos.gr/kino',

  'http://werer.gr',

  'www.foufos.gr',

  'www.mp3.com',

  'www.t.co',

  'http://t.co',

  'http://www.t.co',

  'https://www.t.co',

  'www.aa.com',

  'http://aa.com',

  'http://www.aa.com',

  'https://www.aa.com',

  'www.foufos',

  'www.foufos-.gr',

  'www.-foufos.gr',

  'foufos.gr',

  'http://www.foufos',

  'http://foufos',

  'www.mp3#.com'

];


check.forEach(function(entry) {

  if (entry.match(regex)) {

    $("#output").append( "<div >Success: " + entry + "</div>" );

  } else {

    $("#output").append( "<div>Fail: " + entry + "</div>" );

  }

});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="output"></div>

检查它的新版本


查看完整回答
反对 回复 2019-06-10
?
白板的微信

这些是你要找的机器人。这是从valdator.js这是你真正应该用来做这件事的库。但如果你想自食其力,我又是谁来阻止你呢?如果你想要纯正则表达式,那么你只需取出长度检查。我认为测试URL的长度是个好主意,不过如果您真的想确定是否符合规范的话。

 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]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)
     (?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)
     (?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$';
     var url = new RegExp(urlRegex, 'i');
     return str.length < 2083 && url.test(str);}


查看完整回答
反对 回复 2019-06-10

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信