Проверьте, начинается ли строка с http с помощью 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;
}
Источник: как добавить http, если его не существует в URL
Я просто не знаю, как преобразовать это в javascript. Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
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');
Ответ 2
Это должно работать:
var pattern = /^((http|https|ftp):\/\/)/;
if(!pattern.test(url)) {
url = "http://" + url;
}
jsFiddle
Ответ 3
var url = "http://something.com"
if( url.indexOf("http") == 0 ) {
alert("yeah!");
} else {
alert("No no no!");
}
Ответ 4
Это должно работать:
var re = /^(http|https|ftp)/
Ответ 5
Уточняя предыдущие ответы немного больше, я использовал 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'));