Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.05.2021, 08:03
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

Проверка textarea на запрет ввода элементов ссылки
Приветствую!

На странице есть форма отправки сообщений.
На сервере добавил проверку вводимого содержания на наличие элементов ссылки и все элементы ссылок или названия доменных имен вырезаются. Если сообщение содержало только ссылку, то сохраняется пустое сообщение, что не есть хорошо.
Для PHP использую выражение:
$exge = '@((https?://)?([-\\w]+\\.[-\\w\\.]+)+\\w(:\\d+)?(/([-\\w/_\\.]*(\\?\\S+)?)?)*)(?:[?&][^?$]+=[^?&]*)*@i';

Хотелось бы, что бы выражение можно было переписать под использование в скрипте. Это выражение очень хорошо режет любые варианты ссылок и названия доменных имен.

Нужно сделать проверку формы скриптом на странице, на содержание элементов ссылки и если такие элементы есть в поле textarea, тогда выводить сообщение "Ссылки запрещены" и сообщение не должно отправляться.

Сейчас на странице есть скрипт, который проверяет количество вводимых символов, подсчитывает их и если символов 0 или больше 200, тогда выводит под формой в dstype="error_msg" сообщение "Вы не указали вопрос" или "Вопрос не должен превышать 200 символов" и сообщение не отправляется. Это правильно. Если ошибок в форме нет, тогда сообщение должно отправляться.
Нужно, чтобы сообщение "Ссылки запрещены" выводилось в том же dstype="error_msg", если это не будет мешать выводу других сообщений об ошибке количества символов.
Заранее спасибо, откликнувшимся!

<form method="post" id="save_consult_form2" action='goods/save_consult'>
	<div class="comment-add"><textarea id="textfield3" name="content" type="text"></textarea></div>
	<div class="comment-act">
		<a href="JavaScript:void(0);" dstype="consult_submit" class="dss-btn">Отправить</a>
	</div>
	<span id="consultcharcount"></span> <span dstype="error_msg"></span>
</form>


$(function () {
		$('a[dstype="consult_submit"]').click(function () {
			$('#save_consult_form2').submit();
		});
		
		$('#save_consult_form2').validate({
			errorPlacement: function (error, element) {
				$('span[dstype="error_msg"]').append(error);
			},

			submitHandler: function (form) {
				ds_ajaxpost('save_consult_form2');				
				},
				
			onkeyup: false,
			rules: {
				content: {
					required: true,
					maxlength: 200
				}
			},
            messages : {
                content : {
                    required : 'Вы не указали вопрос',
                    maxlength:'Вопрос не должен превышать 200 символов.'
				}
			}
		});
		
		// textarea подсчет символов
		$("#textfield3").charCount({
			allowed: 200,
			warning: 10,
			counterContainerID: 'consultcharcount',
			firstCounterText: 'Вы можете ввести ещё до',
			endCounterText: 'символов.',
			errorCounterText: 'Текст вопроса превышен на'
		});
	});

Последний раз редактировалось Vaska, 10.05.2021 в 09:26.
Ответить с цитированием
  #2 (permalink)  
Старый 10.05.2021, 10:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Vaska,
искать по форуму или документации $.validator.addMethod смотреть примеры.
Ответить с цитированием
  #3 (permalink)  
Старый 10.05.2021, 11:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

validate запрет ссылок
Vaska,

<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
    </style>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.2/jquery.validate.min.js"></script>
    <script>
        $(function() {
            $('a[dstype="consult_submit"]').click(function() {
                $('#save_consult_form2').submit();
            });
            $.validator.addMethod('removeLink', function(value, element) {
                    return !/(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|(www\.)?[a-zA-Z0-9]+\.[^\s]{2,})/i.test(value)
                },
                'Ссылки запрещены');
            $('#save_consult_form2').validate({
                errorPlacement: function(error, element) {
                    $('span[dstype="error_msg"]').append(error);
                },
                submitHandler: function(form) {
                    ds_ajaxpost('save_consult_form2');
                },
                onkeyup: false,
                rules: {
                    content: {
                        required: true,
                        maxlength: 200,
                        removeLink: true
                    }
                },
                messages: {
                    content: {
                        required: 'Вы не указали вопрос',
                        maxlength: 'Вопрос не должен превышать 200 символов.'
                    }
                }
            });
        });
    </script>
</head>
<body>
    <form method="post" id="save_consult_form2" action='goods/save_consult'>
        <div class="comment-add"><textarea id="textfield3" name="content" type="text"></textarea></div>
        <div class="comment-act">
            <a href="JavaScript:void(0);" dstype="consult_submit" class="dss-btn">Отправить</a>
        </div>
        <span id="consultcharcount"></span> <span dstype="error_msg"></span>
    </form>
</body>
</html>

Последний раз редактировалось рони, 10.05.2021 в 17:04.
Ответить с цитированием
  #4 (permalink)  
Старый 10.05.2021, 16:54
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

рони,спасибо, за помощь!
В целом скрипт работает, как я хотел.
Но есть проблема в выражении.
Переписанное выражение, для скрипта, не видит название домена, как ошибку, в тексте, например javascript.ru и пропускает его для отправки сообщения. Выражение для PHP видит название домена и вырезает его при записи в базу данных.
Можете пересмотреть выражение и поправить его для скрипта правильно?

Последний раз редактировалось Vaska, 10.05.2021 в 17:01.
Ответить с цитированием
  #5 (permalink)  
Старый 10.05.2021, 17:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от Vaska
Можете пересмотреть выражение и поправить его?
поправил, если не подошло, ищите в сборниках RegExp и в целом по инету
Ответить с цитированием
  #6 (permalink)  
Старый 10.05.2021, 17:22
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

рони,
Сейчас работает.
Спасибо, за помощь!
Ответить с цитированием
  #7 (permalink)  
Старый 10.05.2021, 20:35
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

рони,
Можно ли добавить в ваше регулярное выражение условие: кроме ссылок содержащих доменное имя javascript.ru, или содержащее доменное имя subdomain.javascript.ru?
Я посмотрел в интернете, но такую конструкцию я сам не осилил добавить.
Ответить с цитированием
  #8 (permalink)  
Старый 10.05.2021, 21:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

запрет ссылок кроме содержащих javascript.ru
Vaska,
<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
    </style>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.2/jquery.validate.min.js"></script>
    <script>
        $(function() {
            $('a[dstype="consult_submit"]').click(function() {
                $('#save_consult_form2').submit();
            });
            $.validator.addMethod('removeLink', function(value, element) {
                    let reg = /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|(www\.)?[a-zA-Z0-9]+\.[^\s]{2,})/mig
                    let match = value.match(reg);  
                    return  !match || match.every(link  => link.includes('javascript.ru'))
                },
                'Сообщение содержит запрещённые ссылки');
            $('#save_consult_form2').validate({
                errorPlacement: function(error, element) {
                    $('span[dstype="error_msg"]').append(error);
                },
                submitHandler: function(form) {
                    ds_ajaxpost('save_consult_form2');
                },
                onkeyup: false,
                rules: {
                    content: {
                        required: true,
                        maxlength: 200,
                        removeLink: true
                    }
                },
                messages: {
                    content: {
                        required: 'Вы не указали вопрос',
                        maxlength: 'Вопрос не должен превышать 200 символов.'
                    }
                }
            });
        });
    </script>
</head>
<body>
    <form method="post" id="save_consult_form2" action='goods/save_consult'>
        <div class="comment-add"><textarea id="textfield3" name="content" type="text" rows="10"  cols="70">
         javascript.ru
         https://cdnjs.cloudflare.com/ajax   //для теста удалить эту строку
         https://www.javascript.ru
        </textarea></div>
        <div class="comment-act">
            <a href="JavaScript:void(0);" dstype="consult_submit" class="dss-btn">Отправить</a>
        </div>
        <span id="consultcharcount"></span> <span dstype="error_msg"></span>
    </form>
</body>
</html>

Последний раз редактировалось рони, 10.05.2021 в 22:03.
Ответить с цитированием
  #9 (permalink)  
Старый 10.05.2021, 21:47
Профессор
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 178

рони,
с тестовым содержимым формы выражение правильно отрабатывает.
Однако, если удалить всё содержимое, оставить только javascript.ru, нажать кнопку "Отправить", далее изменить javascript.ru на sjavascript.ru - тогда разрешает стороннему домену пройти проверку и сообщение отправляется. Это неправильно.
Ответить с цитированием
  #10 (permalink)  
Старый 10.05.2021, 21:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Vaska,
запрет ссылок кроме содержащих javascript.ru
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка нескольких элементов alexmixaylov jQuery 10 13.02.2014 20:23
Проверка заполнения элементов формы Olegans Элементы интерфейса 0 07.04.2013 21:11
Проверка select на количество выбранных элементов nikolayseo jQuery 2 09.07.2012 23:01
Скрипт - запрет на загрузку и вывод элементов 365441010 Events/DOM/Window 16 26.03.2010 15:43
Запрет на перемещение элементов html Ilyan (X)HTML/CSS 2 26.03.2010 10:21