2011-01-24 8 views
7

Voglio contare le parole in una stringa specifica, così posso convalidarlo e impedire agli utenti di scrivere più di 100 parole, per esempio.come contare le parole in una stringa specifica in PHP?

Ho scritto questa funzione ma non penso che sia abbastanza efficace, ho usato la funzione di esplosione con lo spazio come delimitatore ma cosa succede se l'utente mette due spazi invece di uno. puoi darmi un modo migliore per farlo?

function isValidLength($text , $length){ 

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

suona come un "quante parole del file di testo" problema lavoro per me;) –

+0

Penso che questa sia la soluzione al vostro problema: http://www.reconn.us/count_words.html –

+0

http : //stackoverflow.com/questions/21652261/using-str-word-count-for-utf8-texts – trante

risposta

17

Forse str_word_count potrebbe aiutare

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

$Tag = 'My Name is Gaurav'; 
$word = str_word_count($Tags); 
echo $word; 
+0

Solo un altro ha menzionato 'str_word_count'. Non è appropriato? –

+14

str_word_count è BAD! Conta "il" più volte se è contenuto in parole più grandi come "tema" "teoria" ecc. Str_word_count fa schifo e lo vedo dappertutto su StackOverflow – giorgio79

+5

@ giorgio79 Che ne dici di offrire un'alternativa piuttosto che farneticare come un pazzo. –

2

Utilizzare preg_split() invece di explode(). La divisione supporta le espressioni regolari.

4

Questa funzione utilizza una semplice espressione regolare per dividere l'ingresso $ testo su qualsiasi carattere non-lettera:

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

Questo assicura che è funziona correttamente con le parole separate da più spazi o qualsiasi altro carattere non lettera. Gestisce anche unicode (ad esempio lettere accentate) correttamente.

La funzione restituisce true quando il conteggio delle parole è inferiore a $ lunghezza.

10

È possibile utilizzare la funzione PHP integrata str_word_count. Utilizzare in questo modo:

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

Questa volontà di uscita 5.

Se si pensa di utilizzare caratteri speciali in una qualsiasi delle tue parole, è possibile fornire tutti i caratteri aggiuntivi come terzo parametro.

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

Questa volontà uscita 6.

+2

Perché PHP ha bisogno di usare così tante funzioni ...? – Blender

+0

@Blender Io non seguo. –

+3

@Blender: PHP è semplicemente fantastico. Tutto quello che vuoi è nella libreria standard. Solo questa piccola funzione 'makeBlog()' è ancora mancante. – NikiC

1

Uso substr_count per contare il numero di occorrenze qualsiasi sottostringa. per trovare il numero di parole impostare $ ago su "". int substr_count (string $ pagliaio, string $ ago)

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


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

Ci sono alcuni problemi con questo. Conta spazi, non parole. Quindi, se c'è una parola, restituisce 0. E conta più spazi come parole (ad esempio se si inseriscono due spazi dopo ogni periodo, come spesso accade). – orrd

4

str_count_words ha i suoi difetti. conteggia i caratteri di sottolineatura come parole separate come this_is due parole:

È possibile utilizzare la funzione successiva per contare le parole separate da spazi anche se ce n'è più di una tra di esse.

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; 
6

Prova questo:

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); 

Questo stamperà: 5

+3

Questa è in realtà la migliore risposta finora che sia concisa e non abbia seri problemi di qualche tipo.Ma semplificherò la funzione body come semplicemente 'return count (explode ('', preg_replace ('/ \ s + /', '', trim ($ string))));'. – orrd

0

Ci sono n-1 spazi tra gli oggetti n quindi ci saranno 99 spazi tra 100 parole, in modo da u può scegli e la lunghezza media per una parola dì ad esempio 10 caratteri, poi moltiplica per 100 (per 100 parole) poi aggiungi 99 (spazi), quindi puoi fare la limitazione in base al numero di caratteri (1099).

function isValidLength($text){ 

if (strlen ($ testo)> 1099)

 return false; 

altro return true;

}

0

ho scritto una funzione che è meglio di str_word_count perché quella funzione PHP conta trattini e altri personaggi come parole.

Anche la mia funzione affronta il problema dei doppi spazi, di cui molte delle funzioni scritte da altre persone non tengono conto.

Inoltre questa funzione gestisce i tag HTML. Nel caso in cui due tag fossero nidificati insieme e si usasse semplicemente la funzione strip_tags, questa sarebbe conteggiata come una parola quando è due. Ad esempio: <h1>Title</h1>Text o

Inoltre, escludo JavaScript prima che il codice all'interno dei tag <script> venga considerato come parole.

Infine, la mia funzione gestisce gli spazi all'inizio e alla fine di una stringa, spazi multipli e interruzioni di riga, caratteri di ritorno e caratteri di tabulazione.

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