php 如何计算PHP中特定字符串中的单词?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4786802/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how to count the words in a specific string in PHP?
提问by Waseem Abu Senjer
I want to count the words in a specific string , so I can validate it and prevent users to write more than 100 words for example .
我想计算特定字符串中的单词数,以便我可以验证它并防止用户写超过 100 个单词。
I wrote this function but I don't think it's effective enough , I used the explode function with space as a delimiter but what if the user puts two spaces instead of one . can you give me a better way to do that ?
我写了这个函数,但我认为它不够有效,我使用了带有空格作为分隔符的爆炸函数,但是如果用户放了两个空格而不是一个怎么办。你能给我一个更好的方法吗?
function isValidLength($text , $length){
$text = explode(" " , $text );
if(count($text) > $length)
return false;
else
return true;
}
回答by Francesco Laurita
Maybe str_word_count
could help
也许str_word_count
可以帮助
http://php.net/manual/en/function.str-word-count.php
http://php.net/manual/en/function.str-word-count.php
$Tag = 'My Name is Gaurav';
$word = str_word_count($Tag);
echo $word;
回答by Amr
Try this:
尝试这个:
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);
This will output: 5
这将输出: 5
回答by Michael Irigoyen
You can use the built in PHP function str_word_count
. Use it like this:
您可以使用内置的 PHP 函数str_word_count
。像这样使用它:
$str = "This is my simple string.";
echo str_word_count($str);
This will output 5.
这将输出 5。
If you plan on using special characters in any of your words, you can supply any extra characters as the third parameter.
如果您计划在任何单词中使用特殊字符,您可以提供任何额外的字符作为第三个参数。
$str = "This weather is like el nin?.";
echo str_word_count($str, 0, 'àá?');
This will output 6.
这将输出 6。
回答by Arnaud Le Blanc
This function uses a simple regex to split the input $text on any non-letter character:
此函数使用一个简单的正则表达式将输入的 $text 拆分为任何非字母字符:
function isValidLength($text, $length) {
$words = preg_split('#\PL+#u', $text, -1, PREG_SPLIT_NO_EMPTY);
return count($words) <= $length;
}
This ensures that is works correctly with words separated by multiple spaces or any other non-letter character. It also handles unicode (e.g. accented letters) correctly.
这确保它可以正确处理由多个空格或任何其他非字母字符分隔的单词。它还可以正确处理 unicode(例如重音字母)。
The function returns true when the word count is less than $length.
当字数小于 $length 时,该函数返回 true。
回答by Mackraken
str_count_words has his flaws. it will count underscores as separated words like this_is two words:
str_count_words 有他的缺陷。它会将下划线算作单独的单词,例如 this_is 两个单词:
You can use the next function to count words separated by spaces even if theres more than one between them.
您可以使用 next 函数计算由空格分隔的单词,即使它们之间有多个单词。
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;
回答by Jeff Lamb
Use preg_split() instead of explode(). Split supports regular expressions.
使用preg_split() 而不是explode()。Split 支持正则表达式。
回答by Behzad-Ravanbakhsh
Using substr_countto Count the number of any substring occurrences. for finding number of words set $needle to ' '. int substr_count ( string $haystack , string $needle)
使用substr_count计算任何子字符串出现的次数。用于查找将 $needle 设置为 ' ' 的单词数。int substr_count ( 字符串 $haystack ,字符串 $needle)
$text = 'This is a test';
echo substr_count($text, 'is'); // 2
echo substr_count($text, ' ');// return number of occurance of words
回答by F.E Noel Nfebe
There are n-1 spaces between n objects so there will be 99 spaces between 100 words, so u can choose and average length for a word say for example 10 characters, then multiply by 100(for 100 words) then add 99(spaces) then you can instead make the limitation based on number of characters(1099).
n 个对象之间有 n-1 个空格,因此 100 个单词之间将有 99 个空格,因此您可以选择一个单词的平均长度,例如 10 个字符,然后乘以 100(对于 100 个单词)然后添加 99(空格)那么您可以改为根据字符数(1099)进行限制。
function isValidLength($text){
if(strlen($text) > 1099)
如果(strlen($文本)> 1099)
return false;
else return true;
否则返回真;
}
}
回答by Sean Gallagher
I wrote a function which is better than str_word_count
because that PHP function counts dashes and other characters as words.
我写了一个函数,它比str_word_count
PHP 函数将破折号和其他字符算作单词要好。
Also my function addresses the issue of double spaces, which many of the functions other people have written don't take account for.
我的函数还解决了双空格的问题,其他人编写的许多函数都没有考虑到这一问题。
As well this function handles HTML tags. Where if you had two tags nested together and simply used the strip_tags
function this would be counted as one word when it's two. For example: <h1>Title</h1>Text
or <h1>Title</h1><p>Text</p>
这个函数也处理 HTML 标签。如果您将两个标签嵌套在一起并简单地使用该strip_tags
功能,那么当它是两个时,这将被视为一个词。例如:<h1>Title</h1>Text
或<h1>Title</h1><p>Text</p>
Additionally, I strip out JavaScript first other wise the code within the <script>
tags would be counted as words.
此外,我首先剥离 JavaScript,否则<script>
标签中的代码将被视为单词。
Lastly, my function handles spaces at the beginning and end of a string, multiple spaces, and line breaks, return characters, and tab characters.
最后,我的函数处理字符串开头和结尾的空格、多个空格以及换行符、返回字符和制表符。
###############
# 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;
}