代码之家  ›  专栏  ›  技术社区  ›  Code Guy

匹配url并检查该url是否为域名中的一个

  •  1
  • Code Guy  · 技术社区  · 3 年前

    我在一个数组中有一个列入黑名单的URL列表

    var exclusion = ["facebook.com","instagram.com","twitter.com","youtube.com","linkedin.com","google.com","wordpress.org","pinterest.com","plus.google.com","miit.gov.cn","whatsapp.com","apple.com","goo.gl","qq.com","policies.google.com","youtu.be","microsoft.com","maps.google.com","play.google.com","wa.me","accounts.google.com","github.com","en.wikipedia.org","support.google.com"]
    

    我会得到一个像这样的URL来测试排除列表

    https://www.facebook.com
    http://www.facebook.com
    https://facebook.com
    http://facebook.com
    http://facebook.com?login=true
    http://facebook.com/?login=true
    instagram.com
    

    因此

    for(var i=0;i<exclusion.length;i++)
    {
    if("https://www.facebook.com".indexOf(exclusion[i]) == 0)
     return true;
    }
    

    是一种效率很低的技术 由于该列表 “域名” 并且给定的字符串是URL

    如果指定的URL在域列表中,我如何使函数返回true。

    3 回复  |  直到 3 年前
        1
  •  2
  •   Sukhjinder Singh    3 年前

    你可以像下面这样匹配URL

     var exclusion = ["facebook.com","instagram.com","twitter.com","youtube.com","linkedin.com","google.com","wordpress.org","pinterest.com","plus.google.com","miit.gov.cn","whatsapp.com","apple.com","goo.gl","qq.com","policies.google.com","youtu.be","microsoft.com","maps.google.com","play.google.com","wa.me","accounts.google.com","github.com","en.wikipedia.org","support.google.com"]
    
      var url = "https://www.facebook.com";
      
      for(var i=0;i<exclusion.length;i++)
      {
        if(url.includes(exclusion[i])) {
         console.log('yes');
        }
        else{
        console.log("no");
        }
      }
    

    要在匹配URL时打破循环,可以使用 break; if

    var exclusion = ["facebook.com","instagram.com","twitter.com","youtube.com","linkedin.com","google.com","wordpress.org","pinterest.com","plus.google.com","miit.gov.cn","whatsapp.com","apple.com","goo.gl","qq.com","policies.google.com","youtu.be","microsoft.com","maps.google.com","play.google.com","wa.me","accounts.google.com","github.com","en.wikipedia.org","support.google.com"]
        
          var url = "https://www.facebook.com";
          
          for(var i=0;i<exclusion.length;i++)
          {
            if(url.includes(exclusion[i])) {
             console.log('yes');
             break;
            }
            else{
            console.log("no");
            }
          }
    
        2
  •  1
  •   Nick SamSmith1986    3 年前

    一种方法是去掉URL的无关部分(最好使用URL API,但如果不可能,则使用regex),然后测试结果是否在排除数组中:

    const exclusion = ["facebook.com","instagram.com","twitter.com","youtube.com","linkedin.com","google.com","wordpress.org","pinterest.com","plus.google.com","miit.gov.cn","whatsapp.com","apple.com","goo.gl","qq.com","policies.google.com","youtu.be","microsoft.com","maps.google.com","play.google.com","wa.me","accounts.google.com","github.com","en.wikipedia.org","support.google.com"]
    
    const tests = ['https://www.facebook.com','http://www.facebook.com','https://facebook.com','http://facebook.com','http://facebook.com?login=true','http://facebook.com/?login=true','instagram.com']
    
    var urlRegex = /^https?:\/\/(?:www\.)?([^/?]+).*$/
    
    const blacklistedURL = (url) => exclusion.includes(url.replace(urlRegex, '$1'))
    
    tests.forEach(url => {
      if (blacklistedURL(url)) {
        console.log(`${url} is blacklisted!`)
      }
    })

    笔记 出于演示的目的,我在代码中使用了一个简单的URL匹配正则表达式。有许多更好的正则表达式来匹配URL,您应该使用其中之一。

        3
  •  0
  •   KARTHICK RAVI    3 年前

    为了进行检查,我们可以使用includes。我已经通过数组附加了代码映像映射并进行了检查。希望有帮助 code  image