web-dev-qa-db-ja.com

PHPで特定の文字列の単語を数える方法は?

特定の文字列内の単語を数えたいので、それを検証して、たとえばユーザーが100を超える単語を書かないようにすることができます。

この関数を作成しましたが、十分に効果的ではないと思います。区切り文字としてスペースを使用してexplode関数を使用しましたが、ユーザーが1つではなく2つのスペースを入力するとどうなりますか。それを行うためのより良い方法を教えてもらえますか?

function isValidLength($text , $length){

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

多分 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;
22

これを試して:

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
Amr

組み込みのPHP関数 str_Word_count 。次のように使用します。

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

これは5を出力します。

単語のいずれかに特殊文字を使用する場合は、3番目のパラメーターとして追加の文字を指定できます。

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

これは6を出力します。

10

str_count_wordsには欠点があります。アンダースコアは、this_is2ワードのように分離された単語としてカウントされます。

次の関数を使用して、スペースで区切られた単語が複数ある場合でもカウントできます。

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
Mackraken

この関数は、単純な正規表現を使用して、入力された$ textを文字以外の文字に分割します。

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

これにより、複数のスペースで区切られた単語やその他の文字以外の文字でが正しく機能することが保証されます。また、Unicode(アクセント付き文字など)を正しく処理します。

ワードカウントが$ length未満の場合、関数はtrueを返します。

4
Arnaud Le Blanc

Explode()の代わりにpreg_split()を使用します。 Splitは正規表現をサポートしています。

2
Jeff Lamb

substr_countを使用して、部分文字列の出現回数をカウントします。単語数を見つけるには、$ needleを ''に設定します。 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
1

N個のオブジェクト間にn-1個のスペースがあるため、100個の単語の間に99個のスペースがあります。たとえば、10文字などの単語の平均の長さを選択し、100を掛けて(100個の単語の場合)99(スペース)を追加できます。次に、代わりに文字数(1099)に基づいて制限を行うことができます。

function isValidLength($text){

if(strlen($ text)> 1099)

     return false;

それ以外の場合はtrueを返します。

}

0
F.E Noel Nfebe

PHP関数はダッシュやその他の文字を単語としてカウントするため、str_Word_countよりも優れた関数を作成しました。

また、私の関数は、他の人が書いた関数の多くが考慮していない二重スペースの問題に対処します。

同様に、この関数はHTMLタグを処理します。 2つのタグがネストされていて、単にstrip_tags関数を使用した場合、これは2つであるときに1つの単語としてカウントされます。例:<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
Sean Gallagher