Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Запрет определенных слов в input (https://javascript.ru/forum/dom-window/58435-zapret-opredelennykh-slov-v-input.html)

CrazzyBerg 21.09.2015 21:19

Запрет определенных слов в input
 
Здравствуйте, если такой скрипт который будет проверять слово которое ввели в input и если оно в черном списке (файл или через запятую в скрипте), просто очищать строку.

<input type="text" class="form-control" id="txtCommand">

Если кто знает как реализовать, отзовитесь.

Lemme 21.09.2015 21:42

<input type="text">
<script>
	var blackList = ['lorem', 'ipsum', 'dolor', 'sit', 'amet'];

	document.querySelector('input').onkeyup = function() {
	    var expr = new RegExp(blackList.join('|'));
	    if (this.value.search(expr) !== -1) {
	    	this.value = '';
	    }
	}
</script>

CrazzyBerg 21.09.2015 21:52

<input type="text" id="txtCommand">
<script>
	var blackList = ['go', 'nogo'];

	document.getElementById("txtCommand").onkeyup = function() {
	var expr = new RegExp(blackList.join('|'));
	if (this.value.search(expr) !== -1) {
	this.value = '';
	}
}
</script>

CrazzyBerg 21.09.2015 21:55

Вопрос исчерпан, я добавил только отслеживание по id, скрипт предоставил @Lemme, спасибо большое!

is250 10.10.2016 14:40

Работает!
Спасибо!
Но есть одно НО! Кто-нить мож подскажет
Вбиваю с клавиатуры "go" - слово стирается
Копирую "go" и вставляю в input - слово стирается
Отлично!
НО!
Ставлю курсор в инпут, вбиваю одну букву "g", появляется выпадающий список с куками. Выбираю "go" - вставляется без проблем и не стирается

Dilettante_Pro 10.10.2016 14:49

is250,
добавьте еще обработку события onchange

is250 10.10.2016 17:29

Dilettante_Pro,
что-то никак не въеду, как onchange впихнуть

рони 10.10.2016 17:34

is250,
на какое событие у вас код? onkeyup oninput

is250 10.10.2016 17:52

ну вот есть код от CrazzyBerg
Код:

<input type="text" id="txtCommand">
<script>
        var blackList = ['go', 'nogo'];

        document.getElementById("txtCommand").onkeyup = function() {
        var expr = new RegExp(blackList.join('|'));
        if (this.value.search(expr) !== -1) {
        this.value = '';
        }
}
</script>

надо, чтоб при выборе из списка куков слова "go" - слово go стиралось

рони 10.10.2016 17:55

is250,
пост 8 пробовали?

is250 10.10.2016 18:36

Вы имеете ввиду вместо "onkeyup" - "oninput"?

рони 10.10.2016 18:37

is250,
да

is250 10.10.2016 18:47

рони,
спасибо!
Сделал так:
document.getElementById("txtCommand").onkeyup = function() {
всё работает!!!

is250 14.03.2017 13:17

Опять возвращаюсь к этой теме.
У меня есть сайт с доской объявлений и с каталогом фирм моего маленького городка.
Какой-то нехороший человек приноровился подавать объявы и добавлять фирмы на сайт.
Поставил этот скрипт со стоп-словами -- наиболее встречающиеся слова в объявах и в описании фирм этого "хакера".
Проверяю сам: вставляю его текст - текст стирается полностью - РАБОТАЕТ!
НО, как бы там ни было - этот редиска до сих пор подаёт объявы и фирмы. В день уже доходит до сотни подач.
У меня две мысли на этот счёт: может, у "него" какой-то особенный браузер, который не воспринимает данный скрипт, и вообще - человек ли это?
Сообщество! Есть ли мысли, как отвадить урода?

is250 14.03.2017 13:26

Ещё моменты на тему "человек ли это"
1) Перед добавлением фирмы юзеру надо зарегиться. Этот "хакер" регистрируется, причём есть скрытое от пользователей поле "Фамилия":
<tr style="display:none;"><td>Фамилия:</td><td><input type="text" name="l_name" id="l_name"></td></tr> и только ОН единственный при регистрации заполняет это поле.
2) При добавлении фирмы необходимо ОБЯЗАТЕЛЬНО выбрать одну или несколько категорий (рубрикатор деятельности). Поди, добавь без выбора категории - не получится. А у НЕГО получается.
3) То же самое и с объявами: нужно выбрать категорию,без выбора объяву не подашь. А ОН подаёт, гад

is250 14.03.2017 13:30

Rise,
давно бы уж так сделал,еслиб знал как

рони 14.03.2017 13:31

is250,
на сервере проверять, на клиенте ничего запретить нельзя.

is250 14.03.2017 13:31

к хостеру обратиться?

рони 14.03.2017 13:33

Цитата:

Сообщение от is250
только ОН единственный при регистрации заполняет это поле

на сервере всех кто заполнил это поле банить

рони 14.03.2017 13:41

is250,
это скорее всего программа, а не в ручную через браузер, ip будет разным, почта тоже, прокол таких спам ботов, они парсят все инпуты.

is250 17.03.2017 21:20

Есть у меня доступ к логам (mysite.ru/awstats/)
Только там сухая статистика. Ну чуть побольше, чем в liveinternet

рони 17.03.2017 23:42

Rise,
а чем помогут логи?

рони 18.03.2017 00:43

Rise,
моё предположение:
это программа, в неё заложен список прокси, страницы регистрации форума и почты, по ним она регистрирует почту на майл.ру или гугле, регистрирует ник на форуме, несмотря на все капчи и идёт в одну и туже тему на форуме и размещает там обьяву. прокол таких ботов -- стремятся заполнить все инпуты и обьявы в одну и туже тему.
либо это группа энтузиастов - а где-то есть обьявление, что за подобную работу есть цена 2 цента.
но может повезёт и атака идёт с одного IP.

is250 18.03.2017 18:31

Парни! Спасибо за подсказку!!!
Опишу, как сделал, наверняка, есть ещё люди, у которых такая же беда, как БЫЛА у меня.
Итак.
С FTP скачал лог-файл access_log
Открыл в нотепаде
Там такие строки:
mysite.ru 52.178.206.39 - - [17/Mar/2017:18:12:35 +0300] "GET /companii/gazosnabzhenie/ HTTP/1.0" 200 92386 "-" "Opera/6.04 (Windows XP; U) [de]"

ну или что-то в этом роде
Делаю замену: mysite.ru на пусто, - - на |
Всё скопировал, вставил в эксель
Разбил на два столбца с разделителем "|"
IP - первый столбец, всё остальное - второй (можно делать сортировку как по IP, так и по времени: "17/Mar/2017:18:12:35")
Анализирую.
"Непонравившиеся" IP (очень много переходов на страницы за короткий промежуток времени, страницы добавления фирмы, страницы регистрации) копирую, вставляю в блокнот в одну строку.

В .htaccess вставляю:
Order Allow,Deny
Deny from 130.193.50.22 136.243.75.15 141.8.132.44 141.8.132.74 141.8.142.138 141.8.142.140 141.8.142.200 141.8.142.55 141.8.142.60 141.8.184.31 146.185.223.110 146.185.223.120 146.185.223.130 146.185.223.140 146.185.223.150 146.185.223.160 146.185.223.170 146.185.223.180 157.55.39.100 213.133.111.165 37.140.105.60 92.53.118.114 128.74.110.169 128.72.164.132 5.228.4.116 188.163.76.39 5.18.67.100 124.88.67.17
Allow from All


ВСЁ!!!
За сутки ни одной регистрации, ни одной добавленной роботом фирмы!!!

рони 18.03.2017 18:41

is250,
спасибо за алгоритм поиска спам-бота

рони 18.03.2017 18:55

is250,
да это спам-бот 146.185.223.120, но вот 130.193.50.22 похоже индексатор страниц, робот от яндекса. может уточнить как-то отсев?

is250 18.03.2017 20:37

Цитата:

Сообщение от рони (Сообщение 447782)
is250,
спасибо за алгоритм поиска спам-бота

спасибо за шутку.
и спасибо за наводку

осталось только "подавальщиков" объявлений вычислить

is250 19.03.2017 09:15

Rise, спасибо, мог бы остаться без трафика.
Удалил указанные IP, буду следить за каждой поданной фирмой, объявой, письмом в обратную связь и анализировать

is250 28.03.2017 16:06

Попадаются и такие IP:
2001:4800:7816:517:be76:4eff:fe04:c312
Это тоже IP?

is250 20.04.2017 06:47

Да уж!
Уже, наверное, сотню IP внёс в блокировку, а фирмы как подавал бот, так и подаёт! Ну может, поменьше, чем раньше.
Смотрю по логам: заходит бот на страницу подачи фирмы (или объявы) с "блокированного" IP, и, видать, у него страница или сайт не доступны, тут же меняется IP (в течение пары секунд) и преспокойненько происходит подача фирмы.
Как он, гад, капчу вводит? Капча стоит от captcha.ru.

dasha862 14.10.2019 00:33

Доброго времени.

В продолжении темы, подскажите, пожалуйста, как исключить из input только само запрещённое слово?


<input type="text" id="txtCommand">
<script>
	var blackList = ['поле'];

	document.getElementById("txtCommand").onkeyup = function() {
	var expr = new RegExp(blackList.join('|'), 'i');
	if (this.value.search(expr) !== -1) {
	this.value = '';
	}
}
</script>

То есть, чтобы из input удалялось только запрещённое слово, а не вся стока целиком. Например, ввожу "сочные луга поле", сочные луга - остаются, поле - удаляется.

рони 14.10.2019 08:37

dasha862,
<input type="text" id="txtCommand">
<script>
	var blackList = ['поле'];
 	document.getElementById("txtCommand").addEventListener('input', function() {
	var expr = new RegExp(blackList.join('|'), 'ig');
	if (expr.test(this.value)) {
    expr.lastIndex = 0;
	this.value = this.value.replace(expr, '');
	}
}, false)
</script>

dasha862 14.10.2019 13:39

То, что нужно.
Рони, большое спасибо за помощь!


Часовой пояс GMT +3, время: 02:16.