19.07.2012, 20:10
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Скрипт для автоцензуры текстовых полей
Помогите доделать скрипт для автоцензуры заголовков тем (или любого другого текстового поля).
Устал от бредовых заголовков на своём форуме.
Нужно, чтобы, как только пользователь наберёт стоп-слово, скрипт его тут же удалял и выводил модальное окно с объяснением, почему это не есть гут, что, в принципе, получилось сделать.
Застрял на:
- запрете слов, в которых смешаны кириллические и латинские буквы, и смеси слов с цифрами?
- замене первой буквы на заглавную? (без 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>
Последний раз редактировалось Demath, 20.07.2012 в 00:11.
Причина: Исправил ошибку
|
|
19.07.2012, 22:11
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
<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>
Последний раз редактировалось Deff, 20.07.2012 в 00:46.
|
|
19.07.2012, 23:10
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Deff, простите, не работает.
|
|
19.07.2012, 23:29
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Deff, а что Вы добавили? В смысле, что должно происходить?
Я ввожу стоп-слово, но ничего не происходит(
Извините, за идиотский вопрос.
|
|
19.07.2012, 23:54
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
<!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>
Последний раз редактировалось Deff, 20.07.2012 в 01:13.
|
|
20.07.2012, 00:36
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
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;
}
|
|
20.07.2012, 00:40
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Demath,
a - это входной текст - b - проверяемое слово
Если оно есть - входной текст трансформируется - вместо запретного слова ставицо троеточие и идет повторная проверка на это же слово - если этого слова более нет - в исходный текст возвращается преобразованный текст с удалением(или без, если слово не найдено)
Попробуйте ввести несколько одинаковых недопустимых слов в тексте - должно удалить все (вбейте связный текст
Ксать поправил - в рекурсивном Вызове забыл второй аргумент b (* a=test2(a,b);//alert(a)
Ксать я бы проверял по вводу символов с клавиатуры и при отправке по нажатию кнопки - а после проверки - если все удачно - субмитил, если нет = то только извещение, (* можно заодно и трансформировать текст в textarea вместе с Выводом уведомления - АLERT - автоматом вызывает onchange= и идет повторное уведомление
Последний раз редактировалось Deff, 20.07.2012 в 00:54.
|
|
20.07.2012, 00:57
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Deff, спасибо, понял.
Мой вариант в моём первом посте неверен?
Просто хочу осознать свои ошибки.
Как заменить самую первую букву в <input type=text> на заглавную сразу после ввода пользователем?
Нашёл на этом сайте готовую функцию http://learn.javascript.ru/string#смена-регистра, но не догоняю, как её использовать((
|
|
20.07.2012, 01:03
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Demath,
Да не смотрел тщательно, но в нём однозначно будут сложности про Ваши хитрые Слова и на повтор того же слова при вводе копированием - не будет проверки
|
|
20.07.2012, 01:11
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Сообщение от Deff
|
но в нём однозначно будут сложности про Ваши хитрые Слова и на повтор того же слова при вводе копированием - не будет проверки
|
Проверил - скрипт работает при копипасте.
Или я Вас не так понял?
Последний раз редактировалось Demath, 24.07.2012 в 12:30.
|
|
|
|