Как посчитать слова в конкретной строке в PHP? - PullRequest
11 голосов
/ 24 января 2011

Я хочу посчитать слова в определенной строке, чтобы я мог проверить ее и запретить пользователям писать, например, более 100 слов.

Я написал эту функцию, но не думаю, что она достаточно эффективна, я использовал функцию разнесения с пробелом в качестве разделителя, но что если пользователь поместит два пробела вместо одного. Вы можете дать мне лучший способ сделать это?

function isValidLength($text , $length){

   $text  = explode(" " , $text );
   if(count($text) > $length)
          return false;
   else
          return true;
}

Ответы [ 9 ]

20 голосов
/ 24 января 2011

Может быть str_word_count может помочь

http://php.net/manual/en/function.str-word-count.php

$Tag  = 'My Name is Gaurav'; 
$word = str_word_count($Tag);
echo $word;
10 голосов
/ 23 декабря 2012

Попробуйте:

function get_num_of_words($string) {
    $string = preg_replace('/\s+/', ' ', trim($string));
    $words = explode(" ", $string);
    return count($words);
}

$str = "Lorem ipsum dolor sit amet";
echo get_num_of_words($str);

Будет выведено: 5

10 голосов
/ 24 января 2011

Вы можете использовать встроенную функцию PHP str_word_count.Используйте это следующим образом:

$str = "This is my simple string.";
echo str_word_count($str);

Это выведет 5.

Если вы планируете использовать специальные символы в любом из ваших слов, вы можете указать любые дополнительные символы в качестве третьего параметра.

$str = "This weather is like el ninã.";
echo str_word_count($str, 0, 'àáã');

Это выведет 6.

4 голосов
/ 20 сентября 2012

str_count_words имеет свои недостатки. он будет подчеркивать как отдельные слова, такие как это_два слова:

Вы можете использовать следующую функцию для подсчета слов, разделенных пробелами, даже если между ними больше одного.

function count_words($str){

    while (substr_count($str, "  ")>0){
        $str = str_replace("  ", " ", $str);
    }
    return substr_count($str, " ")+1;
}


$str = "This   is  a sample_test";

echo $str;
echo count_words($str);
//This will return 4 words;
4 голосов
/ 24 января 2011

Эта функция использует простое регулярное выражение для разделения входного $ текста на любой не буквенный символ:

function isValidLength($text, $length) {
    $words = preg_split('#\PL+#u', $text, -1, PREG_SPLIT_NO_EMPTY);
    return count($words) <= $length;
}

Это обеспечивает правильную работу со словами, разделенными несколькими пробелами, или любым другим не буквенным символом.,Он также правильно обрабатывает юникод (например, буквы с акцентом).

Функция возвращает истину, когда количество слов меньше длины $.

2 голосов
/ 24 января 2011

Используйте preg_split () вместо explode ().Split поддерживает регулярные выражения.

1 голос
/ 09 апреля 2011

Использование substr_count для подсчета количества вхождений любой подстроки.для нахождения количества слов установите $ needle в ''.int substr_count (строка $ стог сена, строка $ needle)

$text = 'This is a test';
echo substr_count($text, 'is'); // 2


echo substr_count($text, ' ');// return number of occurance of words
0 голосов
/ 20 мая 2016

Я написал функцию, которая лучше, чем str_word_count, потому что эта функция PHP считает тире и другие символы как слова.

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

Также эта функция обрабатывает теги HTML.Где, если у вас есть два тега, вложенных вместе, и вы просто используете функцию strip_tags, это будет считаться одним словом, когда его два.Например: <h1>Title</h1>Text или <h1>Title</h1><p>Text</p>

Кроме того, сначала я убираю JavaScript, в противном случае код в тегах <script> будет считаться словами.

Наконец, моя функция обрабатываетпробелы в начале и конце строки, несколько пробелов и разрывы строк, возвращаемые символы и символы табуляции.

###############
# Count Words #
###############
function count_words($str)
{
 $str = preg_replace("/[^A-Za-z0-9 ]/","",strip_tags(str_replace('<',' <',str_replace('>','> ',str_replace(array("\n","\r","\t"),' ',preg_replace('~<\s*\bscript\b[^>]*>(.*?)<\s*\/\s*script\s*>~is','',$str))))));
 while(substr_count($str,'  ')>0)
 {
  $str = str_replace('  ',' ',$str);
 }
 return substr_count(trim($str,' '),' ')+1;
}
0 голосов
/ 09 марта 2016

Между n объектами есть n-1 пробел, поэтому между 100 словами будет 99 пробелов, так что вы можете выбрать среднюю длину слова, скажем, например, 10 символов, затем умножить на 100 (для 100 слов), затем добавить 99(пробелы), тогда вы можете вместо этого установить ограничение на основе количества символов (1099).

function isValidLength($text){

if (strlen ($ text)> 1099)

     return false;

иначе вернуть true;

}

...