我想测试我的网址有效性,该网址应以 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
这样的网址将被视为有效的网址,对我来说还不够。
建议?
答案 0 :(得分:1)
只需将^(https?:\\/\\/)?'
更改为^(https?:\\/\\/)'
,?
意味着您要匹配零个或一次出现的模式。您实际上确实希望发生一种情况,所以请不要使用?
:)
? -使上一项为可选。贪婪,因此可选项目包括在比赛中。
答案 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'));