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

时间:2019-03-14 12:40:27

标签: javascript regex

我想测试我的网址有效性,该网址应以 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这样的网址将被视为有效的网址,对我来说还不够。

建议?

2 个答案:

答案 0 :(得分:1)

只需将^(https?:\\/\\/)?'更改为^(https?:\\/\\/)'?意味着您要匹配零个或一次出现的模式。您实际上确实希望发生一种情况,所以请不要使用?:)

来自regular-expressions

  

? -使上一项为可选。贪婪,因此可选项目包括在比赛中。

答案 1 :(得分: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'));