Гид по технологиям

Простой счётчик слов на HTML, CSS и JavaScript

5 min read Веб-разработка Обновлено 09 Jan 2026
Счётчик слов на HTML/CSS/JS — простой пример
Счётчик слов на HTML/CSS/JS — простой пример

Два компьютера рядом; на левом экране открыт редактор кода

К чему это пригодится

Небольшая утилита для подсчёта слов полезна при создании редакторов, форм с ограничением длины, тестовых заданий и учебных проектов. Код легко расширять — добавлять подсчёт символов, лимиты, хранение истории и интеграцию с бекендом.

Что вы получите в этой статье

  • Пошаговый пример интерфейса и связанного JavaScript.
  • Рабочий код для подсчёта слов, учитывающий обычные крайние случаи.
  • Советы, когда простая реализация не подойдёт, и альтернативы.
  • Чек-листы, тест-кейсы и критерии приёмки.

Как создать интерфейс счётчика слов

Чтобы сделать интерфейс, добавьте на простую HTML-страницу элемент textarea, кнопку и место для вывода результата.

  1. Создайте файл index.html.
  2. Добавьте базовую структуру веб-страницы:
      
      
      
      Word Counter   
      
      
     

    Count Words

  3. Внутри контейнера под заголовком добавьте textarea:
  4. Под textarea добавьте кнопку:
  5. Добавьте блок для отображения результата:
    Words: 0
  6. В той же папке создайте файл styles.css.
  7. Заполните CSS простыми стилями:
    body {  
    margin: 0;  
    padding: 0;  
    background-color: #f0fcfc;  
    }  
    
    * {  
    font-family: "Arial", sans-serif;  
    }  
    
    .container {  
    padding: 100px 25%;  
    display: flex;  
    flex-direction: column;  
    line-height: 2rem;  
    font-size: 1.2rem;  
    color: #202C39;  
    }  
    
    textarea {  
    padding: 20px;  
    font-size: 1rem;  
    margin-bottom: 40px;  
    }  
    
    button {  
    padding: 10px;  
    margin-bottom: 40px;  
    } 
  8. Подключите CSS в head:
  9. Откройте index.html в браузере, чтобы протестировать интерфейс.

Открытый в браузере интерфейс счётчика слов

Как правильно считать слова внутри textarea

Простой подход — разделить строку по пробелу: str.split(“ “).length — но у него есть ограничения (много пробелов, переносы строк, знаки препинания). Ниже — несколько реалистичных шагов и разбор ошибок.

  1. Создайте script.js в той же папке.
  2. Подключите его перед закрывающим тегом body:
      
    
    
    
       
    
  3. Получите элементы по id:
    let input = document.getElementById("input");  
    let button = document.getElementById("count-button");  
    let wordCountResult = document.getElementById("word-count-result");
  4. Добавьте обработчик клика:
    button.addEventListener("click", function() {  
    
    });
  5. Внутри обработчика получите введённый текст:
    let str = input.value;
  6. Простая реализация (из исходного примера):
    let wordsList = str.split(" ");
    let count = wordsList.length;
    wordCountResult.innerHTML = count; 

Этот код работает для простых случаев, но считает лишние пустые элементы, если в тексте есть двойные пробелы или переносы строки.

Улучшенная реализация (рекомендованная)

Используйте trim() и разделение по любым пробельным символам с помощью регулярного выражения. Это убирает начальные/концевые пробелы и корректно обрабатывает последовательности пробелов и переносов строк.

// script.js — улучшенная версия
let input = document.getElementById("input");
let button = document.getElementById("count-button");
let wordCountResult = document.getElementById("word-count-result");

button.addEventListener("click", function() {
  let str = input.value || ""; // безопасно, если поле пустое
  // Убираем начальные и конечные пробелы и разделяем по любым пробельным символам
  let words = str.trim().split(/\s+/).filter(Boolean);
  // Если строка была пустой (только пробелы), filter вернёт пустой массив
  let count = words.length;
  wordCountResult.textContent = count;
});

Пояснения: trim() удаляет пробелы в начале/конце; /\s+/ матчит один или более пробельных символов (включая табы и переносы строк); filter(Boolean) дополнительно убирает пустые строки.

Как учитывать пунктуацию и специальные случаи

  • Для большинства задач достаточно разделения по пробельным символам. Но если нужно убрать знаки препинания из слов (например, считать “hello,” как “hello”), примените предобработку:
    let cleaned = str.replace(/["'“”()\[\],.:;!?—–]/g, "");
    let words = cleaned.trim().split(/\s+/).filter(Boolean);
  • Для языков с особыми токенами (китайский, японский) простое split не подойдёт — требуется сегментация на слова, использующая словари или библиотеки.

Как использовать пример

  1. Откройте index.html в браузере.

Интерфейс счётчика слов в браузере

  1. Введите текст в textarea.

Счётчик слов с заполненным текстом в textarea

  1. Нажмите кнопку “Count Words” — число обновится.

Счётчик слов в браузере с обновлённым результатом

Когда простая реализация даёт неверные результаты (примеры и обходы)

  • Многоразовые пробелы и переносы строк: простой split(“ “) вернёт пустые элементы. Решение: trim() + split(/\s+/).
  • Пунктуация, кавычки, скобки: если не очищать, они остаются в словах. Решение: удалить пунктуацию перед split или применять более точную токенизацию.
  • Слова с дефисом и апострофом: “self-employed” или “don’t” — решайте политикой: считать как одно слово или два. Для одного слова не удаляйте дефис и апостроф.
  • Языки без пробелов (китайский, японский): нужен специализированный разбор.

Альтернативные подходы

  • Использовать библиотеку для токенизации (например, для сложных языков или NLP-задач).
  • Подсчёт слов на сервере — если нужно учитывать словари, пользовательские правила и хранение статистики.
  • Подсчёт символов вместо слов — полезно, когда ограничение по символам важнее (SMS, твиты).

Критерии приёмки

  • Поле ввода принимает произвольный текст и не падает при вводе больших объёмов.
  • Нажатие кнопки даёт корректный числовой результат.
  • Пустая строка и строка из пробелов дают 0 слов.
  • Текст с переносами строк и табуляцией корректно считается.
  • Пунктуация не приводит к созданию пустых элементов в результате.

Тестовые случаи (acceptance)

  1. Пустая строка -> 0
  2. “Hello world” -> 2
  3. “ Hello world “ (много пробелов) -> 2
  4. “Line1\nLine2” -> 2
  5. “end.” -> 1 (если не очищаем пунктуацию) или 1 (если очищаем пунктуацию)
  6. “don’t stop” -> 2 (если апостроф не удалять)
  7. Долгий текст (10 000+ символов) — приложение не должно тормозить существенно

Чек‑лист ролей

  • Разработчик: реализовать trim + split(/\s+/) + filter(Boolean), написать unit‑тесты.
  • QA: пройти тестовые случаи, проверить производительность и корректность на краевых данных.
  • Ревьюер: убедиться, что код читабелен и нет уязвимостей (XSS не влияет на внутренний подсчёт, но вывод в DOM должен использовать textContent).

Шпаргалка / Snippets

  • Самый простой подсчёт (не рекомендуется для продакшена):
    let count = input.value.split(" ").length;
  • Надёжный короткий вариант:
    let count = input.value.trim().split(/\s+/).filter(Boolean).length;
  • Удалить базовую пунктуацию и посчитать:
    let cleaned = input.value.replace(/["'“”()\[\],.:;!?—–]/g, "");
    let count = cleaned.trim().split(/\s+/).filter(Boolean).length;

Краткий глоссарий

  • token: единица текста, обычно слово.
  • split: метод строки для разделения по разделителю.
  • trim: удаление пробелов в начале и конце строки.

Безопасность и доступность

  • Выводите результат через textContent или innerText, а не через innerHTML, чтобы не рендерить HTML, введённый пользователем.
  • Добавьте aria-атрибуты для кнопки и поля, если требуется доступность.

Заключение

Счётчик слов — простой, но полезный проект для практики JavaScript и работы с DOM. Начните с реализации trim() + split(/\s+/), добавьте тесты и улучшайте поведение для конкретных языков или требований. Это отличная отправная точка для расширения: лимиты, подсказки пользователю и аналитика.

Важно: если вы планируете поддержку языков без пробелов, используйте специализированные токенизаторы или библиотеки NLP.


Краткое резюме:

  • Создайте index.html, styles.css и script.js.
  • Используйте trim() + split(/\s+/) для надёжного подсчёта.
  • Тестируйте на краевых случаях и добавляйте очистку пунктуации по необходимости.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Градиенты в Canva: добавить и настроить
Дизайн

Градиенты в Canva: добавить и настроить

Ошибка Disabled accounts can't be contacted в Instagram
Социальные сети

Ошибка Disabled accounts can't be contacted в Instagram

Генерация случайных чисел в Google Sheets
Google Таблицы

Генерация случайных чисел в Google Sheets

Прокручиваемые скриншоты в Windows 11
Windows

Прокручиваемые скриншоты в Windows 11

Как установить корпусной вентилятор в ПК
Железо

Как установить корпусной вентилятор в ПК

Check In в iOS 17: настройка и безопасность
How-to

Check In в iOS 17: настройка и безопасность