Подтвердить что ты не робот

Превращая "http://" в URL, который еще не содержит "http://",

У меня есть поле input, которое сохраняет URL-адрес, я бы хотел, чтобы этот сохраненный ввод распознавал, когда "Http//" отсутствует в начале переменной, но понятия не имеет, с чего начать... это можно проверить только часть строки? - то есть функция, которая при необходимости добавится?

4b9b3361

Ответ 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://"))
{ 

}