检查 JavaScript 字符串是否为 URL
2022-08-29 23:09:50
在JavaScript中,有没有办法检查字符串是否是URL?
正则表达式被排除在外,因为 URL 很可能写得像 ;也就是说,它可能没有 、 或 。stackoverflow
.com
www
http
在JavaScript中,有没有办法检查字符串是否是URL?
正则表达式被排除在外,因为 URL 很可能写得像 ;也就是说,它可能没有 、 或 。stackoverflow
.com
www
http
如果要检查字符串是否为有效的HTTP URL,可以使用URL
构造函数(它将抛出格式错误的字符串):
function isValidHttpUrl(string) {
let url;
try {
url = new URL(string);
} catch (_) {
return false;
}
return url.protocol === "http:" || url.protocol === "https:";
}
注意:根据 RFC 3886,URL 必须以方案(不限于 http/https)开头,例如:
www.example.com
无效的 URL(缺少方案)javascript:void(0)
是有效的 URL,尽管不是 HTTP URLhttp://..
是主机所在的有效 URL(是否解析取决于您的 DNS)..
https://example..com
是有效的 URL,同上或者这个来自 Devshed 的正则表达式:
function validURL(str) {
var 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);
}