Консультация № 175302
15.12.2009, 20:25
35.00 руб.
0 2 1
Здравствуйте.
Как реализовать следующий алгоритм на javascript:
Есть текст в переменной text (допустим символов 500). Есть поле textarea. Туда нужно ввести пользователю этот же текст и проверить ошибки в словах (знаки препинания не учитывать) и вывести в alert ошибочные слова.

Обсуждение

Неизвестный
15.12.2009, 23:09
общий
это ответ
Здравствуйте, Sager.
предлагаю так:
1) разбиваем эталонный текст на массив слов при помощи text.split(/\W/); - разделителем выступает регулярное выражение "всё, кроме словообразующих символов"
2) также разбиваем textarea.value;
3) перебираем слова в текстареа:

for (var i = 0; i < textareaArray.length; i++)
{
if (textareaArray[i] !in ethalonArray)
alert(textareaArray[i]);
}

вот как-то так...
5
Неизвестный
15.12.2009, 23:26
общий
конечно, стОит доработать разбивку - на предмет регулярного выражения (русские слова оно, как оказалось, "не ловит"), удаления двойных пробелов, переводов строк, знаков препинания и тп, например:
Код:
<script>
Array.prototype.in_array = function(p_val) { // пришлось дописывать прототип in_array, поскольку in ищет не в массиве, а в его ключах (((
for(var i = 0, l = this.length; i < l; i++) {
if(this[i] == p_val) {
return true;
}
}
return false;
}

var text = "Здравствуйте, Sager . предлагаю так: 1) "; // эталонный текст
var textareaValue = "Здрасьте, Sager . предлОгаю так: 1) "; // тут реально берётся текст из текстареа
var ethalonArray = text.split(/[^a-zA-Zа-яА-Я]+/); // эталонный массив слов
var textareaArray = textareaValue.split(/[^a-zA-Zа-яА-Я]+/); // массив введённых слов
for (var i = 0; i < textareaArray.length; i++)
{
if ( ! ethalonArray.in_array(textareaArray[i]))
alert(">" + textareaArray[i] + "<");
}
</script>


по идее ещё можно искать слова textareaArray[i] как подстроку в text, но это не совсем просто, поскольку мы не знаем, каким небуквенным символом будет ограничено слово, и к тому же неизвестно, какой способ быстрее...
Форма ответа