У меня есть поле input
, которое сохраняет URL-адрес, я бы хотел, чтобы этот сохраненный ввод распознавал, когда "Http//" отсутствует в начале переменной, но понятия не имеет, с чего начать... это можно проверить только часть строки? - то есть функция, которая при необходимости добавится?
Превращая "http://" в URL, который еще не содержит "http://",
Ответ 1
Простым решением для вас является следующее:
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; }
Связанные вопросы
Ответ 2
Если вы также хотите разрешить "https://", я бы использовал регулярное выражение, подобное этому:
if (!/^https?:\/\//i.test(url)) {
url = 'http://' + url;
}
Если вы не знакомы с регулярными выражениями, здесь каждая часть означает.
-
^
- Только совпадение в начале строки -
http
- сопоставить буквенную строку "http" -
s?
- необязательно соответствует значению "s" -
:
- сопоставить двоеточие -
\/\/
- Побег над символами "/", поскольку они отмечают начало/конец регулярного выражения - "i" после регулярного выражения делает его нечувствительным к регистру, поэтому он будет соответствовать "HTTP://" и т.д.
Ответ 3
Поднято из 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, не испортят ссылки.
Ответ 4
Вот что я использую для мгновенного удовлетворения. используя прослушиватель клавиатуры в jquery.
$('#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());
}
});
Ответ 5
Я изменил @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;
}
Ответ 6
Что-то вроде этого (запись по памяти)?
if (url.toUpper(url.substring(0, 7) != "HTTP://")
url = "http://" + url;
Ответ 7
if (url.indexOf('http://') != 0)
url = 'http://' + url;
Ответ 8
Ниже фрагмента кода проверяется:
- Проверяет, не является ли URL-адрес пустым.
- Удаляет пустые пробелы в начале или в конце
-
Проверяет http://example.com, https://example.com И //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 }
Ответ 9
Я лично использую это, частично взятое из php docs
$scheme = parse_url($link, PHP_URL_SCHEME);
if (empty($scheme)) {
$link = 'http://' . ltrim($link, '/');
}
Ответ 10
Я изменил @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;
}
Ответ 11
Вы можете использовать "StartsWith" в System.String.
if (url.ToUpper().StartsWith("HTTP://"))
{
}