Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Скрипт для автоцензуры текстовых полей (https://javascript.ru/forum/dom-window/29980-skript-dlya-avtocenzury-tekstovykh-polejj.html)

Demath 19.07.2012 20:10

Скрипт для автоцензуры текстовых полей
 
Помогите доделать скрипт для автоцензуры заголовков тем (или любого другого текстового поля).
Устал от бредовых заголовков на своём форуме.
Нужно, чтобы, как только пользователь наберёт стоп-слово, скрипт его тут же удалял и выводил модальное окно с объяснением, почему это не есть гут, что, в принципе, получилось сделать.
Застрял на:
- запрете слов, в которых смешаны кириллические и латинские буквы, и смеси слов с цифрами?
- замене первой буквы на заглавную? (без text-transform из CSS, скриптово)
- удалении точки, если она является самым последним символом в строке?

<!DOCTYPE html>
<html>
<head>
<meta http-equiv=content-type content="text/html; charset=utf-8">

<script type=text/javascript>
stopWords=['помогите','помагите','памогите','памагите','срочно','горю',
           'пожалуйста','пожалуста','пжл','пож.','плиз','хелп','надо',
           'нужно','нужна','необходим','нуждаюсь','прошу','помощи',
		   'нужна ваша помощь','хочу','хотелось бы','как бы','как-бы',
		   'какбы','завтра','умоляю','подскажите','нужен совет','!',
		   'ребята','люди','уважаемые','окажите помощь','здравствуйте',
		   'здраствуйте','спасибо','спс','благодар','болею','болел',
		   'больниц','беремена','попросил','такой','такая','такое',
		   'такие','help','plz','pls','please','pleas','plez','sos']

function test(obj)
{   obj=document.getElementById("abcd");
    currentText=obj.value;
    for(var i=0; i<stopWords.length; i++)
        {re=new RegExp(stopWords[i],"gi");
         if(re.test(currentText))
            {temp="";
             for(var j=0; j<stopWords[i].length; j++){temp+=""}
             currentText=currentText.replace(re,temp);
             obj.value=currentText;
             alert('Уважаемый пользователь!\n\nСогласно Правилам форума, '+
                   'в Названии сообщения не\nдопустимы слова и выражения, '+
                   'не отражающие его суть:\n\nПомогите, Срочно, '+
                   'Пожалуйста, Плиз, Хелп, Help, SOS\nи т.д. и т.п.'+
                   '\n\nАдминистрация настоятельно рекомендует Вам впредь '+
                   'не\nнарушать Правила форума, в противном случае на Вас '+
                   'будут\nналожены санкции, вплоть до вечного бана.');
           }
        }
}
</script>
  
<body>
<p>Введите любое из слов:<br />
<b>помогите, срочно, горю, пожалуйста, плиз, хелп, help, sos</b></p>
<input style="width: 400px;" placeholder="Здесь" id="abcd" onkeyup="test(this)" onchange="test(this)">
</body>
</html>

Deff 19.07.2012 22:11

<script type=text/javascript>
stopWords=['помогите','помагите','памогите','памагите','срочно','горю',
           'пожалуйста','пожалуста','пжл','пож.','плиз','хелп','надо',
           'нужно','нужна','необходим','нуждаюсь','прошу','помощи',
		   'нужна ваша помощь','хочу','хотелось бы','как бы','как-бы',
		   'какбы','завтра','умоляю','подскажите','нужен совет','!',
		   'ребята','люди','уважаемые','окажите помощь','здравствуйте',
		   'здраствуйте','спасибо','спс','благодар','болею','болел',
		   'больниц','беремена','попросил','такой','такая','такое',
		   'такие','help','plz','pls','please','pleas','plez','sos']

function test2(a,b) {var FlagStop=false;
      if(a.indexOf(b)!=-1) {FlagStop=true;
      a=a.replace(b,'...');
      a=test2(a,b);alert(a)
      }
 return a;
}

function test(obj)
{   obj=document.getElementById("abcd");
    currentText=obj.value;

    for(var i=0; i<stopWords.length; i++){
        currentText=test2(currentText,stopWords[i])
    }
	  if(currentText!=obj.value){
             alert('Уважаемый пользователь!\n\nСогласно Правилам форума, '+
                   'в Названии сообщения не\nдопустимы слова и выражения, '+
                   'не отражающие его суть:\n\nПомогите, Срочно, '+
                   'Пожалуйста, Плиз, Хелп, Help, SOS\nи т.д. и т.п.'+
                   '\n\nАдминистрация настоятельно рекомендует Вам впредь '+
                   'не\nнарушать Правила форума, в противном случае на Вас '+
                   'будут\nналожены санкции, вплоть до вечного бана.');
           }

}
</script>

Demath 19.07.2012 23:10

Deff, простите, не работает.

Demath 19.07.2012 23:29

Deff, а что Вы добавили? В смысле, что должно происходить?
Я ввожу стоп-слово, но ничего не происходит(

Извините, за идиотский вопрос.

Deff 19.07.2012 23:54

<!DOCTYPE html>
<html>
<head>
<meta http-equiv=content-type content="text/html; charset=utf-8">

<script type=text/javascript>
stopWords=['помогите','помагите','памогите','памагите','срочно','горю',
           'пожалуйста','пожалуста','пжл','пож.','плиз','хелп','надо',
           'нужно','нужна','необходим','нуждаюсь','прошу','помощи',
		   'нужна ваша помощь','хочу','хотелось бы','как бы','как-бы',
		   'какбы','завтра','умоляю','подскажите','нужен совет','!',
		   'ребята','люди','уважаемые','окажите помощь','здравствуйте',
		   'здраствуйте','спасибо','спс','благодар','болею','болел',
		   'больниц','беремена','попросил','такой','такая','такое',
		   'такие','help','plz','pls','please','pleas','plez','sos']

function test2(a,b) {var FlagStop=false;
      if(a.indexOf(b)!=-1) {FlagStop=true;
      a=a.replace(b,'...');
      a=test2(a,b);//alert(a)
      }
 return a;
}

function test(obj)
{   obj=document.getElementById("abcd");
    var a=obj.value;
    obj.value=(a.substr(0,1).toUpperCase(0)+a.substr(1))
    currentText=obj.value;

    for(var i=0; i<stopWords.length; i++){
        currentText=test2(currentText,stopWords[i])
    }        alert('Выходной текст с правками: \n'+currentText)
	  if(currentText!=obj.value){
             alert('Уважаемый пользователь!\n\nСогласно Правилам форума, '+
                   'в Названии сообщения не\nдопустимы слова и выражения, '+
                   'не отражающие его суть:\n\nПомогите, Срочно, '+
                   'Пожалуйста, Плиз, Хелп, Help, SOS\nи т.д. и т.п.'+
                   '\n\nАдминистрация настоятельно рекомендует Вам впредь '+
                   'не\nнарушать Правила форума, в противном случае на Вас '+
                   'будут\nналожены санкции, вплоть до вечного бана.');
           }

}
</script>
  
<body>
<p>Введите любое из слов:<br />
<b>помогите, срочно, горю, пожалуйста, плиз, хелп, help, sos</b></p>
<textarea style="width: 400px; height: 100px" id="abcd" onkeyup="test(this)" onchange="test(this)"></textarea>
</body>
</html>

Demath 20.07.2012 00:36

Deff,

Не совсем понимаю, что должна делать эта функция?

function test2(a,b) {var FlagStop=false;
      if(a.indexOf(b)!=-1) {FlagStop=true;
      a=a.replace(b,'...');
      a=test2(a);//alert(a)
      }
 return a;
}

Deff 20.07.2012 00:40

Demath,
a - это входной текст - b - проверяемое слово
Если оно есть - входной текст трансформируется - вместо запретного слова ставицо троеточие и идет повторная проверка на это же слово - если этого слова более нет - в исходный текст возвращается преобразованный текст с удалением(или без, если слово не найдено)
Попробуйте ввести несколько одинаковых недопустимых слов в тексте - должно удалить все (вбейте связный текст

Ксать поправил - в рекурсивном Вызове забыл второй аргумент b (* a=test2(a,b);//alert(a)

Ксать я бы проверял по вводу символов с клавиатуры и при отправке по нажатию кнопки - а после проверки - если все удачно - субмитил, если нет = то только извещение, (* можно заодно и трансформировать текст в textarea вместе с Выводом уведомления - АLERT - автоматом вызывает onchange= и идет повторное уведомление

Demath 20.07.2012 00:57

Deff, спасибо, понял.

Мой вариант в моём первом посте неверен?
Просто хочу осознать свои ошибки.

Как заменить самую первую букву в <input type=text> на заглавную сразу после ввода пользователем?

Нашёл на этом сайте готовую функцию http://learn.javascript.ru/string#смена-регистра, но не догоняю, как её использовать((

Deff 20.07.2012 01:03

Demath,
Да не смотрел тщательно, но в нём однозначно будут сложности про Ваши хитрые Слова и на повтор того же слова при вводе копированием - не будет проверки

Demath 20.07.2012 01:11

Цитата:

Сообщение от Deff
но в нём однозначно будут сложности про Ваши хитрые Слова и на повтор того же слова при вводе копированием - не будет проверки

Проверил - скрипт работает при копипасте.

Или я Вас не так понял?


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