修复Javascript中的常见URL错误

时间:2012-03-01 19:37:05

标签: javascript regex

我有一个Chrome扩展程序,允许用户输入网址。有时用户会错过“http://”。如果没有完整的网址,Chrome似乎会认为链接是扩展程序中的本地文件。

目前我的解决方案就是这个 -

    var http_temp = $(this).attr("href");
    if($.trim(http_temp).substr(0, 4)!="http"){
        $(this).attr("href", "http://"+$(this).attr("href"));
    }

有没有更好的方法来解决这个问题?我如何检测URL中最常见的错误。正则表达式还是别的什么会更好?

由于

2 个答案:

答案 0 :(得分:0)

这听起来不错,虽然当然没有https,但我不知道如何解决这个问题。

也许,您还可以检查链接是否存在

function UrlExists(myUrl) {
    var http = new XMLHttpRequest();
    http.open('HEAD', myUrl, false);
    http.send();
    return http.status != 404;
}

答案 1 :(得分:0)

你可以尝试这个,它应该检测大多数协议(不仅仅是http):

if( !(/^\w{3,5}\:\/\//i.test(url)) ) {
    url = 'http://'+url;
}

可能有更复杂的协议检测,但这适用于最常见的协议检测。

如果您假设所有用户都输入了http协议,那么另一个选择是:如何在输入之前打印出协议?这样,用户就知道将添加协议。这是一种常见的可用性实践:

http://<input type="text">

然后,如果用户输入协议,则很容易检测到并剥离:

url = 'http://'+url.replace(/.*:\/\//,'');