代码之家  ›  专栏  ›  技术社区  ›  firasKoubaa

javascript:检查url是否有效并以“http//”或“https://”开头

  •  0
  • firasKoubaa  · 技术社区  · 5 年前

    我想测试我的url有效性,应该从 http:// http:// ,

    我用过这个 正则表达式 :

    private testIfValidURL(str) {
        const pattern = new RegExp('^(https?:\\/\\/)?' + // protocol
          '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
          '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
          '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
          '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
          '(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator
        return !!pattern.test(str);
      }
    

    这是可行的,执行一个案例:

    要认为它是有效的,我的url应该总是以 http:// https:// ,但在我的函数中,url如下 www.abcd.com 将被视为有效的网址,这对我来说是不够的。

    建议?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Michał Turczyn    5 年前

    只是改变 ^(https?:\\/\\/)?' ^(https?:\\/\\/)' , the ? 意思是你想匹配一个模式的零个或一个发生。你其实只想要一次,所以不要用 ? :)

    regular-expressions :

    ?-使前面的项成为可选项。贪婪的,所以如果可能的话,可选的项目会包含在匹配中。

        2
  •  1
  •   Orelsanpls    5 年前

    您可以删除 (...)? 字符,因此必须先有http或https序列。

    function testIfValidURL(str) {
      const pattern = new RegExp('^https?:\\/\\/' + // protocol
        '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
        '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
        '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
        '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
        '(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator
    
      return !!pattern.test(str);
    }
    
    console.log(testIfValidURL('www.abcd.com'));
    console.log(testIfValidURL('http://www.abcd.com'));
    console.log(testIfValidURL('https://www.abcd.com'));
    console.log(testIfValidURL('htt://www.abcd.com'));