【问题标题】:Regex to match only URLs with a tld正则表达式仅匹配带有 tld 的 URL
【发布时间】:2019-01-29 17:21:40
【问题描述】:

我知道有无穷无尽的正则表达式来验证 URL,但我发现所有问题都遇到了问题。我需要一个匹配所有 Http 或 Https url 的正则表达式,但不验证链接是否没有 tld 并且不验证它是否缺少子域。如果可能,它还需要匹配完整的 url slug。

以下是不应验证的网址示例:

https://www
https://www.
https://www.exampledomain

下面是几个应该验证的 URL 示例:

https://www.axiamed.com
https://www.axiamed.com/independent-software-vendors/

我一直在使用下面的正则表达式...

((ftp|https?)://[-\w]+(\.\w[-\w]*)+|(?:[a-z0-9](?:[-a-z0-9]*[a-z0-9])?\.)+(?: com\b|edu\b|biz\b|gov\b|in(?:t|fo)\b|mil\b|net\b|org\b|[a-z][a-z]\b))(\:\d+)?(/[^.!,?;"'<>()\[\]{}\s\x7F-\xFF]*(?:[.!,?]+[^.!,?;"'<>()\[\]{}\s\x7F-\xFF]+)*)?

...但是我不希望匹配上面列出的 3 个 URL 中的最后一个。不知道从这里去哪里。谁能指出我正确的方向?

感谢任何愿意提供帮助的人!

【问题讨论】:

  • 您的正则表达式完全不完整。它显然早于 TLD 爆炸。
  • 你可以使用一个虚拟的a 标签并从中获取协议和路径属性。你愿意接受这样的解决方案吗?

标签: javascript regex


【解决方案1】:

嘿,这是您的问题的示例 javascript 代码

var result =/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/|ftp:\/\/www\.|ftp:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/.test("https://www.axiamed.com/independent-software-vendors/");
if(result)
alert("url Matching");
else
alert("Url not matching")

希望对你有帮助

【讨论】:

    【解决方案2】:

    怎么样? /^(ftp|https?)\:\/{2}w{3}\.[a-z_A-Z]{1,}\.[a-z]{3}(\/(.){1,})?/g

    var urls = [
        "https://www",
        "https://www.",
        "https://www.exampledomain",
        "https://www.axiamed.com",
        "https://www.axiamed.com/independent-software-vendors/"
    ]
    var valids = urls.map((str) => {
      return str.match(/^(ftp|https?)\:\/{2}w{3}\.[a-z_A-Z]{1,}\.[a-z]{3}(\/(.){1,})?/g)
    })
    console.log(valids)

    【讨论】:

      【解决方案3】:

      试试这个

      ^(http://www.|https://www.)?[a-z0-9]+([-.]{1}[a-z0-9]+).[ a-z]{2,5}(:[0-9]{1,5})?(/.)?$

      var a =[
      "https://www.example.com",
      "http://www.example.com",
      "www.example.com",
      "example.com",
      "http://blog.example.com",
      "http://www.example.com/product",
      "http://www.example.com/products?id=1&page=2",
      "http://www.example.com#up",
      "https://www",
      "https://www.",
      "https://www.exampledomain",
      "https://www.axiamed.com",
      "https://www.axiamed.com/independent-software-vendors/",
      ];
      a.forEach(function(url) {
         var result =/^(http:\/\/www\.|https:\/\/www\.)[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/.test(url);
      if(result){
      
      
      console.log(url+" TRUE");
      }
      else{
      
      console.log(url+" FALSE")
      }
      });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多