În multe aplicații web și formulare de contact este necesar să validezi lungimea textului introdus de utilizatori nu doar prin numărul de caractere, ci și prin numărul efectiv de cuvinte. Această validare este frecvent întâlnită la formulare de recenzii, comentarii, articole sau cereri de ofertă, unde se impune o limită minimă sau maximă de cuvinte.
Pentru a număra cuvintele dintr-un text în limbajul PHP, cea mai eficientă și directă soluție este funcția nativă str_word_count().
Utilizarea funcției native str_word_count()
Funcția nativă str_word_count() este inclusă direct în nucleul PHP și este optimizată pentru performanță:
$text = "Validarea formularelor web este esențială pentru calitatea datelor.";
$numar_cuvinte = str_word_count($text);
echo "Număr de cuvinte: " . $numar_cuvinte;
// Rezultat: 9
Suport pentru diacritice românești în str_word_count()
În mod implicit, funcția recunoaște caracterele din alfabetul englez. Pentru ca textele redactate în limba română (care includ literele ă, â, î, ș, ț) să fie contorizate impecabil, poți specifica caracterele adiționale în al treilea argument:
$diacritice = 'ăâîșțĂÂÎȘȚ';
$text_ro = "Învățăm programare web în fiecare zi.";
$total = str_word_count($text_ro, 0, $diacritice);
echo "Total cuvinte: " . $total;
// Rezultat: 6
Numărarea cuvintelor UTF-8 folosind expresii regulate (PCRE)
O altă metodă modernă și foarte robustă pentru texte internaționale complexe (UTF-8) constă în utilizarea expresiilor regulate cu parametrul unicode \p{L} (care include orice literă din orice alfabet):
function numara_cuvinte_utf8($text) {
preg_match_all('/[\p{L}\p{N}]+/u', $text, $matches);
return count($matches[0]);
}
$mesaj = "Succes la dezvoltarea proiectelor tale PHP!";
echo numara_cuvinte_utf8($mesaj); // 6
Atenție la codul legacy: de ce trebuie evitate funcțiile ereg / eregi
În versiunile vechi de PHP se foloseau funcții precum eregi_replace() sau eregi() pentru a împărți textul și a număra cuvintele manual. Începând cu PHP 7.0, toate funcțiile din extensia POSIX Regex (ereg*) au fost eliminate definitiv din limbaj. Dacă întreții un proiect vechi care utilizează aceste funcții, se recomandă înlocuirea lor imediată cu str_word_count() sau cu funcțiile preg_* (PCRE).