在尚未包含“http://”的 URL 前添加“http://”

IT技术 javascript html variables
2021-03-12 17:14:34

我有一个input保存 URL字段,我希望这个保存的输入能够识别变量开头不存在“Http//”但不知道从哪里开始......是否可以只检查一部分一个字符串?- 然后有一个函数可以在必要时追加?

6个回答

如果您还想允许“https://”,我会使用这样的正则表达式:

if (!/^https?:\/\//i.test(url)) {
    url = 'http://' + url;
}

如果您不熟悉正则表达式,以下是每个部分的含义。

  • ^ - 只匹配字符串的开头
  • http - 匹配文字字符串“http”
  • s? - 可选匹配“s”
  • : - 匹配一个冒号
  • \/\/ - 转义“/”字符,因为它们标记了正则表达式的开始/结束
  • 正则表达式后的“i”使其不区分大小写,因此它将匹配“HTTP://”等。
我们如何才能避免 FTP url?
2021-04-24 17:14:34
你应该知道这!/^https?:\/\//i.test(undefined)true. 我建议检查是否url不是假的:if (!!url && !/^https?:\/\//i.test(url)) {...
2021-04-25 17:14:34
使用答案中的正则表达式,可以编写一行代码: 'stackoverflow.com'.replace(/^(https?:\/\/)?/i, (a)=>a || 'http: //')
2021-05-14 17:14:34
!/^(https?:)?\/\//i.test(url)用于处理 //:example.com。
2021-05-21 17:14:34

您想要的简单解决方案如下:

var prefix = 'http://';
if (s.substr(0, prefix.length) !== prefix)
{
    s = prefix + s;
}

但是,您应该注意一些事项......

这里的测试区分大小写。这意味着如果字符串最初是Http://example.com这将改变它http://Http://example.com可能不是你想要的。您可能也不应该修改任何以开头的字符串,foo://否则最终可能会得到类似http://https://example.com.

另一方面,如果您收到这样的输入,example.com?redirect=http://othersite.com那么您可能确实想要预先添加,http://因此仅搜索对于://通用解决方案来说可能不够好。

替代方法

  • 使用正则表达式:

    if (!s.match(/^[a-zA-Z]+:\/\//))
    {
        s = 'http://' + s;
    }
    
  • 使用 URI 解析库,例如JS-URI

    if (new URI(s).scheme === null)
    {
        s = 'http://' + s;
    }
    

相关问题

很好的解决方案。保持
2021-04-26 17:14:34
请注意协议相关 URLS(以 开头的 url)//,这可能会产生意外结果。例如://example.com/foo,上面的代码将其更改为http:////example.com/foo
2021-05-11 17:14:34

Linkenizer 中解除(Null 不会介意)

link = (link.indexOf('://') === -1) ? 'http://' + link : link;

这将预先考虑'http://'link,如果它不能找到://指示协议。如果://出现在字符串的其他地方,这将无法正常工作,但已经足够了。

例子:

http://www.google.com -> http://www.google.com
ftp://google.com      -> ftp://google.com
www.google.com        -> http://www.google.com
google.com            -> http://google.com

既然您说要保存此 URL,那么最好在服务器端执行此操作,这样禁用 js 的客户端就不会弄乱链接。

轻微改善: ((link.indexOf('://') === -1) && (link.indexOf('mailto:') === -1) ) ? 'http://' + link : link
2021-04-27 17:14:34

ES6,一个内胆

这是一种“现代”方法:

const withHttp = url => !/^https?:\/\//i.test(url) ? `http://${url}` : url;

您现在可以将其withHttp用作函数:

const myUrl = withHttp("www.example.org");

这是我用来即时满足的东西。在 jquery 中使用 keyup 侦听器。

$('#url').keyup(function () {
        if (  ($(this).val().length >=5) && ($(this).val().substr(0, 5) != 'http:') && ($(this).val().substr(0, 5) != 'https') ) {
            $(this).val('http://' + $(this).val());
        }
    });
谢谢,使用了这个,只是将 JQuery 选择器更改为 $('input[type=url]')
2021-04-29 17:14:34