我一直在查看现在在Chrome Canary中实现的新URL specification,它看起来非常有用。
在将URI传递到URL
对象之前,有没有办法验证URI?
例如
var urlToCheck = "http//www.google.com";
if(URL.isValid(urlToCheck)) {
var u = new URL(urlToCheck, baseUrl);
console.log(u.hostname);
}
我在链接规范文档中看不到任何内容。我真的不想处理抛出的Exception只是为了检查URI是否有效。
答案 0 :(得分:2)
您在评论中说,您无法判断它是基本网址还是无效网址,因此您不必单独检查它们。如果是这样,为什么不这样做呢?例如,像这样:
URL.isValid = function(url, base) {
if(base !== undefined) {
try {
new URL(base);
}
catch(e) {
return false;
}
}
try {
new URL(url, base);
return true;
}
catch(e) {
return false;
}
});
通过首先检查URL.isValid(base)然后检查URL.isValid(url,base),让您同时检查两者,如果您愿意,或者按照您的意愿单独检查。如果第一次检查失败,则表示base无效,如果第二次检查无效,则表示url无效。如果您真的想要,可以根据哪个网址无效,从.isValid返回单独的错误代码。
答案 1 :(得分:2)
实际上,URL构造函数的2参数版本接受任何内容作为其第一个参数:
try{
new URL(null, 'http://www.example.com');
new URL({ob:'jects',even:{nested:'ones'}}, 'http://www.example.com');
new URL(['arrays'], 'http://www.example.com');
new URL(/regexes/, 'http://www.example.com');
new URL(false, 'http://www.example.com');
new URL(undefined, 'http://www.example.com');
console.log('new URL() takes any value as its first parameter!');
}catch(e){}
这意味着您无需验证这两个网址;您只需要验证基本URL。因此,像这样的简单解决方案就足够了:
URL.isValid = function(url) {
try{
new URL(url);
} catch(e) {
return false;
}
return true;
};
答案 2 :(得分:0)
您可以使用此功能验证网址:
function isValidUrl(url) {
return url.match(/^(ht|f)tps?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/);
}