如何计算PHP中特定字符串中的单词?

时间:2011-01-24 20:27:51

标签: php string validation explode

我想计算特定字符串中的单词,因此我可以对其进行验证并阻止用户编写超过100个单词。

我编写了这个函数,但是我认为它不够有效,我使用了带空格的爆炸函数作为分隔符但是如果用户放置两个空格而不是一个空格怎么办。你能给我一个更好的方法吗?

function isValidLength($text , $length){

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

9 个答案:

答案 0 :(得分:20)

也许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;

答案 1 :(得分:10)

您可以使用内置的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。

答案 2 :(得分:9)

试试这个:

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

答案 3 :(得分:4)

此函数使用简单的正则表达式将输入$ text分割为任何非字母字符:

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

这可以确保使用由多个空格或任何其他非字母字符分隔的单词正常工作。它还正确处理unicode(例如重音字母)。

当字数小于$ length时,该函数返回true。

答案 4 :(得分:4)

str_count_words有他的缺点。它将下划线视为分隔的单词 this_是两个字:

您可以使用下一个函数计算由空格分隔的单词,即使它们之间有多个单词。

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;

答案 5 :(得分:2)

使用preg_split()而不是explode()。 Split支持正则表达式。

答案 6 :(得分:1)

使用 substr_count 计算任何子字符串出现次数。查找单词数量设置为$ needle to''。 int substr_count(string $ haystack,string $ needle)

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


echo substr_count($text, ' ');// return number of occurance of words

答案 7 :(得分:0)

n个对象之间有n-1个空格,所以100个单词之间会有99个空格,所以你可以选择一个单词的平均长度,例如10个字符,然后乘以100(100个单词)然后加99 (空格)然后您可以根据字符数(1099)进行限制。

function isValidLength($text){

if(strlen($ text)&gt; 1099)

     return false;

否则          return true;

}

答案 8 :(得分:0)

我编写了一个比str_word_count好的函数,因为PHP函数将破折号和其他字符统计为单词。

此外,我的功能解决了双倍空间的问题,其他人写的许多功能都没有考虑到。

此功能也处理HTML标记。如果你有两个嵌套在一起的标签并且只使用strip_tags函数,那么当它是两个时,这将被算作一个单词。例如:<h1>Title</h1>Text<h1>Title</h1><p>Text</p>

此外,我首先将<script>标记内的代码视为单词,从而首先删除JavaScript。

最后,我的函数处理字符串开头和结尾的空格,多个空格和换行符,返回字符和制表符。

###############
# 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;
}