我有一个input
字段可以保存一个URL,我希望这个保存的输入可以在“Http //”是从变量的开始缺席,但不知道从哪里开始......是否有可能只检查一部分字符串? - 然后有必要的话可以附加一个函数?预先将“http://”添加到一个不包含“http://”的URL中
回答
你想要的东西一个简单的解决方案是:
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; }
相关问题
这是推荐的。 – Marwelln 2010-08-22 20:28:20
好的解决方案。继续保持 – 2015-01-22 06:38:29
注意协议相对URL(以URL开始的url),这可能会有意想不到的结果。例如:'// example.com/foo',上面的代码会将其改为'http:////示例。com/foo' – 2015-06-24 20:05:16
这样的事情(通过记忆写)?
if (url.toUpper(url.substring(0, 7) != "HTTP://")
url = "http://" + url;
'url.substring(0,7).toUpperCase()' – 2010-08-22 20:43:53
你可以使用“StartsWith”System.String的成员。
if (url.ToUpper().StartsWith("HTTP://"))
{
}
这不是C#。 – quantumSoup 2010-08-22 20:27:43
if(isNotC#){return“StartWith does not exist。”; } – Hello71 2010-08-22 20:28:08
JavaScript的美妙之处在于,这可以完成。 – 2010-08-22 20:32:33
从Linkenizer解禁(空不会介意)
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禁用不会乱谁的客户链接。
请记住,这'mailto:'链接将失败。 – 2010-08-22 20:46:06
如果您还想允许“https://开头”,我会使用一个正则表达式是这样的:
if (!/^https?:\/\//i.test(url)) {
url = 'http://' + url;
}
如果你不熟悉正则表达式,这里是各个部分。
^
- 只匹配在字符串http
的开始 - 匹配文本字符串 “HTTP”s?
- 可选匹配一个 “s”:
- 匹配一个冒号\/\/
- 由于它们标记正则表达式的开始/结尾,因此可以跳过“/”字符- 正则表达式之后的“i”使它不区分大小写的,因此将匹配“HTTP://”等
没有帮助,如果URL已经'Http:'或'HTTP:'。 – 2014-10-30 03:23:47
你应该知道'''!/^https?:\/\ // i.test(undefined)'''是'''true'''。 我建议检查'''url'''是否没有错: '''if(!! url &&!/^https?:\/\ // i.test(url)){...' '' – 2017-05-12 07:14:07
使用'''!/ ^(https?:)?\/\ // i.test(url)'''来处理//:example.com。 – 2017-06-12 09:47:33
if (url.indexOf('http://') != 0)
url = 'http://' + url;
我个人使用,这部分从PHP文档采取
下面是我使用的及时行乐。利用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]')''' – dirk 2016-01-29 13:14:46
我改变@Mark Byers的回答也包括“https://”。
function formatUrl(url){
var httpString = 'http://'
, httpsString = 'https://'
;
if (url.substr(0, httpString.length) !== httpString && url.substr(0, httpsString.length) !== httpsString)
url = httpString + url;
return url;
}
我改变@Morgan Taylor和@Mark Byer的答案是不区分大小写的。作品以http://和https://
function formatUrl(url)
{
var httpString = "http://";
var httpsString = "https://";
if (url.substr(0, httpString.length).toLowerCase() !== httpString && url.substr(0, httpsString.length).toLowerCase() !== httpsString)
url = httpString + url;
return url;
}
下面的代码片段检查:
- 检查,如果网址不为空
- 在启动流浪删除空格或结束
检查http://example.com,https://example.com AND //example.com
if (!!url && !!url.trim()) { //Check if url is not blank url = url.trim(); //Removes blank spaces from start and end if (!/^(https?:)?\/\//i.test(url)) { //Checks for if url doesn't match either of: http://example.com, https://example.com AND //example.com url = 'http://' + url; //Prepend http:// to the URL } } else { //Handle empty url }
- 1. Http POST请求URL包含'['
- 2. 将HTTP头添加到webpack包请求
- 3. 如何在需要时将“http://”协议预先添加到网址中?
- 4. 将HTTP头添加到HttpSoapClientProtocol
- 5. 查看时将http url添加到https url
- 6. 发现流星:将http://自动添加到输入的URL
- 7. 将http://添加到URL仍然会被解释为不完整URL
- 8. 是否有过将URL片段包含到HTTP请求中的提议?
- 9. 在这个PHP URL缩短代码中包含“http://”
- 10. Rails 5包含预先加载
- 11. TinyMCE:如果URL不存在,如何在URL中添加'http://'
- 12. Window.Open造成的问题,当URL不包含http
- 13. 分享Tweet按钮鸣叫的URL不包含http:// WWW
- 14. 将HTTP Legacy添加到Android Studio
- 15. 将HTTP基本认证添加到servletRequest
- 16. 将标题添加到Http标题
- 17. 将http:// www添加到网址
- 18. 将条件应用于Linq中的预先加载(包含)请求到实体
- 19. 添加HTTP头到NSURLRequest
- 20. 当URL可能包含或不包含HTTP和WWW时,URL为URL的正则表达式
- 21. 如何在HTTP服务器的URL中包含tspecials(<,“等)?
- 22. 如何在我的url中始终包含http:// www
- 23. 在URL中包含特殊字符的HTTP状态代码
- 24. 在HTTP模块添加一个Http-页眉和从页面
- 25. HTTP添加另一个参数
- 26. 验证网址|预先登录http://
- 27. 添加一个包含带参数的url的数据表列
- 28. 包含/需要HTTP地址
- 29. 预期一个HTTP 302却得到了一个HTTP 301使用的NodeJS HTTP客户端
- 30. 预先将“http://”添加到PHP的fopen()的文件名足够安全以防止读取本地文件?
https也是一个考虑因素吗? – 2010-08-22 20:44:40