Javascript:检查网址是否有效并以“http //”或“https://”开头

问题描述 投票:0回答:2

我想测试我的网址有效性,它应该以http://或https://开头,

我使用过这个RegExp:

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);
  }

除了一个案例外,这将有效:

要将其视为有效,我的网址应始终以http://https://开头,但凭借我的功能,像www.abcd.com这样的网址会被视为有效的网址,这对我来说还不够。

建议?

javascript regex
2个回答
1
投票

只需将^(https?:\\/\\/)?'更改为^(https?:\\/\\/)'?意味着您要匹配模式的零或一个匹配。你实际上只想要一次出现,所以不要使用? :)

来自regular-expressions

? - 使前面的项目可选。贪心,所以如果可能的话,可选项包含在比赛中。


1
投票

您可以删除(...)?字符,因此必须首先使用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'));
© www.soinside.com 2019 - 2024. All rights reserved.