Перейти к содержимому


Фото
- - - - -

Как input добавить http на js


  • Чтобы отвечать, сперва войдите на форум
2 ответов в теме

#1 alexivchenko

alexivchenko
  • Пользователь
  • 66 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 16.10.2019 - 14:12

Здравствуйте! 

 

На странице с формой есть поле input name="url" для указания веб-сайта 

Ссылки указываются без http

Как при нажатии кнопки "отправить" произвести проверку, если в поле name="url" введена ссылка на веб-сайт без http, тогда добавить и сохранить. 

Пробовал что-то придумать по типу масок для телефона и даты, но ничего не вышло 



#2 alexivchenko

alexivchenko
  • Пользователь
  • 66 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 16.10.2019 - 15:24

Нашел вот такой код

	$('input[name=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());
        }
    });	

Все конечно хорошо и работает

 

Что если в это поле вставляют ссылку типа mailto: и tel:? 

Дописал так

	$('input[name=url]').keyup(function () {
        if (  ($(this).val().length >=5) && ($(this).val().substr(0, 5) != 'http:') && ($(this).val().substr(0, 5) != 'https') && ($(this).val().substr(0, 7) != 'mailto:') && ($(this).val().substr(0, 4) != 'tel:') ) {
            $(this).val('http://' + $(this).val());
        }
    });	

 

Тоже работает

 

Теперь вопрос другой, так как эта форма заполняется поставщиком или представителем, то возможно будут и глубокие ссылки типа tg://, whatsapp://, skype:// viber:// 

 

В админке я создал поле с разрешенными префиксами и сохраняю их в json типа ["mailto","tel"]

Далее проверка на php

function validate_url_format($url) {
    $parsed_url = parse_url($url);

    if(!$parsed_url) {
        return false;
    }

    if(!isset($parsed_url['scheme'])) {
        return false;
    }

    if(!isset($parsed_url['host']) && !isset($parsed_url['path'])) {
        return false;
    }

    $prefix = $parsed_url['scheme'];

    if(!in_array($prefix, get_links_allowed_prefixes())) {
        return false;
    }

    return true;
}

function get_links_allowed_prefixes() {
    global $settings;

    return array_merge(['http', 'https'], $settings->links_allowed_prefixes);
}

Как мне лучше сделать, думаю, что не на JS, а на php

 

Проверку, если scheme пустая и не prefix добавить http:// 



#3 Noxter

Noxter
  • Забаненый
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 16.10.2019 - 20:56

https://www.php.net/...rs.validate.php




0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых