如何检查用户输入的文本是否包含Javascript中的http://

时间:2012-07-03 09:10:47

标签: javascript url

我有一个设置,我的网站要求用户输入网址。有时用户输入http://google.com/和其他时间google.com,但我的应用支持使用http://https://的网址,我试过这个:

var a = document.getElementById('tinput').value;
if (a.indexOf(escape('http://')) < 0 && a.indexOf(escape('https://')) < 0){
b = 'http://' + a;
document.getElementById('tinput').value = b;
}
document.getElementById("urlfrm").submit();

但是这个工作。它总是将http://添加到所有URL,即使它们包含相同的URL。怎么办?

3 个答案:

答案 0 :(得分:2)

尝试

var a = document.getElementById('tinput').value;
if (a.indexOf('http://') == -1 && a.indexOf('https://') == -1){
b = 'http://' + a;
document.getElementById('tinput').value = b;
document.getElementById("urlfrm").submit();
} else {
document.getElementById("urlfrm").submit();
}

答案 1 :(得分:1)

试试这个:

var field = document.getElementById('tinput');
if (!/^https?:\/\//.test(field.value)) field.value = 'http://'+field.value;

需要注意的几点:

  • 您当前的检查允许http(s)://位于字符串中的任何位置 - 您应该只在开始时检查

  • 为了代码可读性,并且因为indexOf()可以返回的唯一值为零,所以最好明确检查,而不是< 0

  • 您无缘无故地创建了一个全局变量(b

  • 不要逃避 - 正如xdevel在评论中所说,这意味着你要检查字符串的编码版本,而不是字符串本身

答案 2 :(得分:0)

您只需使用正则表达式即可完成此操作,非常值得了解它们。

if ( a.match("^https?://") ) {
    alert("a is a url");
}