1

我有这样的设置,我的网站要求用户输入 URL。有时用户输入 likehttp://google.com/和其他时间google.com,但我的应用程序支持带有http://or的 URL 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。该怎么办?

4

3 回答 3

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();
}
于 2012-07-03T09:18:20.303 回答
1

试试这个:

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

有几点需要注意:

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

  • 出于代码可读性的考虑,并且因为在零下唯一indexOf()可以返回的值是 -1,所以最好明确地检查它,而不是< 0

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

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

于 2012-07-03T09:22:24.867 回答
0

您可以简单地使用正则表达式来做到这一点,非常值得学习它们。

if ( a.match("^https?://") ) {
    alert("a is a url");
}
于 2012-07-03T09:23:43.153 回答