Foros del Web » Programando para Internet » PHP »

Encontrar "cualquiera de estas" palabras en una cadena

Estas en el tema de Encontrar "cualquiera de estas" palabras en una cadena en el foro de PHP en Foros del Web. Hola a todos. Lo que quiero hacer es que si en una cadena existe cualquier palabra de las que tengo en un array, me devuelva ...
  #1 (permalink)  
Antiguo 28/07/2011, 14:54
 
Fecha de Ingreso: julio-2011
Mensajes: 3
Antigüedad: 12 años, 8 meses
Puntos: 0
De acuerdo Encontrar "cualquiera de estas" palabras en una cadena

Hola a todos.

Lo que quiero hacer es que si en una cadena existe cualquier palabra de las que tengo en un array, me devuelva un booleano. Ya he encontrado varios temas similares, y créanme que intento hacer lo que dicen, pero no me funciona bien.

Este es el código que llevo hasta ahora:

Código PHP:
function block_post () {
$hosts = array('megaupload''rapidshare''mediafire');
$text 'Descarga aquí: rapidshare.com';

for (
$i=0$i count($hosts); $i++) { 
        if (
preg_match('/' .$hosts[$i]. '/i'$text))
            return 
TRUE;
        else
            return 
FALSE;
    }    
}    

if (
block_post())
    echo 
"El post contiene links no permitidos!";
else
    echo 
"Bienvenido al post."
Cuando en la variable $text escribo "megaupload", funciona correctamente, pero cuando escribo "rapidshare" o "mediafire" es como si no los encontrara...

¿Qué es lo que he hecho mal?
Muchísimas gracias.
  #2 (permalink)  
Antiguo 28/07/2011, 15:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Encontrar "cualquiera de estas" palabras en una cadena

Eso es normal, ya que sin importar el resultado de la comparación estas usando return, y eso detiene la ejecución misma del resto del bucle y la función.

En dado caso, solo conviene tener el return positivo dentro del bucle, y el return negativo hacía el final del mismo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 28/07/2011, 15:11
 
Fecha de Ingreso: julio-2011
Mensajes: 3
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Encontrar "cualquiera de estas" palabras en una cadena

Podrías explicarme mejor cuando dices "Solo conviene tener el return positivo dentro del bucle, y el return negativo hacía el final del mismo."

¿Cuál es la forma correcta de hacerlo?
Un saludo.
  #4 (permalink)  
Antiguo 28/07/2011, 15:14
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Encontrar "cualquiera de estas" palabras en una cadena

Te explicaré con manzanas
Código PHP:

for ($i=0$i count($hosts); $i++) { //Un bucle
    //Dentro del bucle
}
//Fuera del bucle

return true// Return positivo
return false//Return negativo 
Ahora, asociando... Return positivo dentro del bucle y return negativo fuera...

Saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #5 (permalink)  
Antiguo 28/07/2011, 15:20
 
Fecha de Ingreso: julio-2011
Mensajes: 3
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Encontrar "cualquiera de estas" palabras en una cadena

¡Oh! pero qué despistado soy jajaja. Y pensar que era algo tan simple, funciona perfectamente ahora.

¡MIL GRACIAS!
  #6 (permalink)  
Antiguo 28/07/2011, 15:30
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 9 meses
Puntos: 35
Respuesta: Encontrar "cualquiera de estas" palabras en una cadena

Como comentario, tambien podrías aprovechar mas las expresiones regulares y usar algo como:

Código PHP:
Ver original
  1. <?php
  2. function block_post() {
  3.     $hosts = array('megaupload', 'rapidshare', 'mediafire');
  4.     $text = 'Descarga aquí: rapidshare.com';
  5.  
  6.     if (preg_match('@(' . implode('|', $hosts) . ')@i', $text) !== false) {
  7.         return false;
  8.     }
  9.  
  10.     return true;
  11. }

No lo probe, pero en teoria debería funcionar :P
__________________
Sin Ideas
  #7 (permalink)  
Antiguo 28/07/2011, 17:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Encontrar "cualquiera de estas" palabras en una cadena

Tal cual lo tienes oso96_2000 siempre te va a devolver false y no creo que sea necesario el if, podria ser algo así:

Código PHP:
Ver original
  1. ...
  2. return preg_match('@(' . implode('|', $hosts) . ')@i', $text);
o
Código PHP:
Ver original
  1. ...
  2. return !!preg_match('@(' . implode('|', $hosts) . ')@i', $text);

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: encontrar, palabras, preg_match
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:52.