使用 Javascript 检查字符串是否以 http 开头
Check if a string starts with http using Javascript
我一直在寻找这个问题的答案,我找到的所有答案都没有在JavaScript中。
我需要一种方法,在javascript中,检查字符串是否以http,https或ftp开头。如果它不是以其中一个开头,我需要在字符串前面加上 http://
.indexOf 对我不起作用,我认为我不需要 http、https 或 ftp。此外,我不希望像 google.com/?q=http://google.com
这样的东西触发它是有效的,因为它不以 http 开头,而 indexOf 会触发它是真的(如果我没有完全弄错的话)。
我找到的最接近的PHP正则表达式是这样的:
function addhttp($url) {
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
$url = "http://" . $url;
}
return $url;
}
来源:如果 url 中不存在,如何添加 http
我只是不知道如何将其转换为javascript。任何帮助将不胜感激。
export const getValidUrl = (url = "") => {
let newUrl = window.decodeURIComponent(url);
newUrl = newUrl.trim().replace(/'s/g, "");
if(/^(:'/'/)/.test(newUrl)){
return `http${newUrl}`;
}
if(!/^(f|ht)tps?:'/'//i.test(newUrl)){
return `http://${newUrl}`;
}
return newUrl;
};
测试:
expect(getValidUrl('https://www.test.com')).toBe('https://www.test.com');
expect(getValidUrl('http://www.test.com')).toBe('http://www.test.com');
expect(getValidUrl(' http : / / www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('ftp://www.test.com')).toBe('ftp://www.test.com');
expect(getValidUrl('www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('://www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('http%3A%2F%2Fwww.test.com')).toBe('http://www.test.com');
expect(getValidUrl('www . test.com')).toBe('http://www.test.com');
这应该有效:
var pattern = /^((http|https|ftp):'/'/)/;
if(!pattern.test(url)) {
url = "http://" + url;
}
js小提琴
var url = "http://something.com"
if( url.indexOf("http") == 0 ) {
alert("yeah!");
} else {
alert("No no no!");
}
非正则表达式声明方式:
const hasValidUrlProtocol = (url = '') =>
['http://', 'https://', 'ftp://'].some(protocol => url.startsWith(protocol))
这应该有效:
var re = /^(http|https|ftp)/
完善了以前的答案,我使用new RegExp(...)
来避免混乱的转义,并且还添加了一个可选的s
。
var pattern = new RegExp('^(https?|ftp)://');
if(!pattern.test(url)) {
url = "http://" + url;
}
var pattern = new RegExp('^(https?|ftp)://');
console.log(pattern.test('http://foo'));
console.log(pattern.test('https://foo'));
console.log(pattern.test('ftp://foo'));
console.log(pattern.test('bar'));
我想说的最佳可读性是使用.startsWith('theString')
。
下面的代码检查http://
、https://
和ftp://
,如果它们中的任何一个符合,则okUrl
设置为布尔值 true,方法是使用 ||
表示 or
。
当您知道 url 是否不包含这些字符串时,只需将 http://
添加到字符串的开头,或者使用文字 ( ${}
)
let url = 'google.com'
const urlOK = url.startsWith('http://') || url.startsWith('https://') || url.startsWith('ftp://')
if (!urlOk) url = `http://${url}`
// => 'http://google.com'
或者使用简单的字符串concat,可以通过多种方式完成,例如:
url = 'http://' + url
在此处阅读更多相关信息并进行测试:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
- Meteor如何接收HTTP请求
- 对id以某个字符串开头的元素进行计数
- 如果元素's的ID以数字开头
- 在我的情况下,如何进行http请求
- //而不是在src=“”上使用http://"属性
- 我无法使用angularJs($http)访问服务器
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 角度异步http自动完成
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 角度http服务器页面刷新404s
- http.listen()在运行时接受终端命令
- IIS动态HTTP响应标头
- spring和angularJS(我得到了类似HTTP状态404的错误)
- 存储$http如何从$http函数(Angularjs)外部获取可访问变量中的响应
- Typescript angularjs$http获取响应类型(避免使用<any>)
- 如何从HTTP上下文对象中获取Post数据
- Angular http.get没有'我不喜欢在开头和结尾加方括号的文本文件
- 使用 Javascript 检查字符串是否以 http 开头
- 将类添加到<a>if href以开头http://www.twitter.com/.