2011-01-24 28 views
7

Quiero contar las palabras en una cadena específica, así que puedo validarla y evitar que los usuarios escriban más de 100 palabras, por ejemplo.cómo contar las palabras en una cadena específica en PHP?

Escribí esta función pero no creo que sea lo suficientemente efectiva, utilicé la función de explosión con espacio como delimitador, pero ¿qué pasa si el usuario pone dos espacios en lugar de uno? ¿Puedes darme una mejor manera de hacer eso?

function isValidLength($text , $length){ 

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

suena como un "¿Cuántas palabras en el archivo de texto" problema de tarea para mí;) –

+0

Creo que esta es la solución para su problema: http http://www.reconn.us/count_words.html –

+0

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

Respuesta

17

Tal str_word_count podría ayudar

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

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

Solo otro ha mencionado 'str_word_count'. ¿No es apropiado? –

+14

str_word_count es MALO! Cuenta "el" múltiples veces si está contenido en palabras más grandes como "tema", "teoría", etc. str_word_count es una mierda y lo veo todo en stackoverflow – giorgio79

+5

@ giorgio79 ¿Qué tal ofrecer una alternativa en lugar de despotricar como un loco? –

2

Utilice preg_split() en lugar de explotar(). Split admite expresiones regulares.

4

Esta función utiliza una expresión regular simple de dividir el texto de entrada $ en cualquier carácter que no sea letra:

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

Esto asegura que se funciona correctamente con palabras separadas por espacios múltiples o cualquier otro carácter que no sea letra. También maneja unicode (por ejemplo, letras acentuadas) correctamente.

La función devuelve verdadero cuando el recuento de palabras es inferior a $ length.

10

Puede usar la función PHP incorporada str_word_count. Utilizar de esta manera:

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

Esta es la salida 5.

Si usted planea usar caracteres especiales en cualquiera de sus palabras, se puede suministrar cualesquiera caracteres adicionales como tercer parámetro.

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

Esta es la salida 6.

+2

¿Por qué PHP necesita usar tantas funciones ...? – Blender

+0

@Blender No sigo. –

+3

@Blender: PHP es simplemente increíble. Todo lo que quiere está en la biblioteca estándar. Solo falta esta pequeña función 'makeBlog()'. – NikiC

1

Usando substr_count para contar el número de las apariciones de la subcadena. para encontrar el número de palabras, configure $ needle to ''. int substr_count (string $ pajar, string $ aguja)

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


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

Hay algunos problemas con esto. Cuenta espacios, no palabras. Entonces, si hay una palabra, devolvería 0. Y cuenta espacios múltiples como palabras (como si pusiera dos espacios después de cada período como se hace a menudo). – orrd

4

str_count_words tiene sus defectos. contará guiones bajos como palabras separadas como this_is dos palabras:

Puede usar la siguiente función para contar palabras separadas por espacios, incluso si hay más de uno entre ellos.

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

Prueba esto:

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

Esta es la salida: 5

+3

Esta es en realidad la mejor respuesta hasta ahora que es concisa y no tiene problemas serios de algún tipo.Pero simplificaría el cuerpo de la función simplemente como 'return count (explotar (' ', preg_replace ('/\ s +/',' ', trim ($ string)))); '. – orrd

0

hay n-1 espacios entre n objetos por lo que habrá 99 espacios entre las 100 palabras, así que se puede elija y la duración promedio de una palabra, por ejemplo, 10 caracteres, luego multiplique por 100 (para 100 palabras), luego agregue 99 (espacios), luego puede hacer la limitación basada en el número de caracteres (1099).

function isValidLength($text){ 

si (strlen ($ texto)> 1099)

 return false; 

demás return true;

}

0

escribí una función que es mejor que str_word_count debido a que la función de PHP cuenta guiones y otros caracteres como palabras.

También mi función aborda el problema de los espacios dobles, que muchas de las funciones que otras personas han escrito no tienen en cuenta.

Además esta función maneja etiquetas HTML. Donde si tuviera dos etiquetas anidadas juntas y simplemente usara la función strip_tags esto se contará como una palabra cuando son dos. Por ejemplo: <h1>Title</h1>Text o <h1>Title</h1><p>Text</p>

Además, elimino el código JavaScript primero; de lo contrario, el código dentro de las etiquetas <script> se contabilizaría como palabras.

Por último, mi función maneja espacios al principio y al final de una cadena, espacios múltiples y saltos de línea, caracteres de retorno y tabulación.

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