Comprobar si una cadena no contiene una subcadena específica [duplicate]

4 minutos de lectura

Avatar de usuario de Lucas Matos
Lucas Matos

En SQL tenemos NOT LIKE %string%

Necesito hacer esto en PHP.

if ($string NOT LIKE %word%) { do something }

creo que se puede hacer con strpos()

Pero no puedo entender cómo…

Necesito exactamente esa oración de comparación en PHP válido.

if ($string NOT LIKE %word%) { do something }

  • Actualicé el título para reflejar mejor la pregunta. También se debe establecer la semántica exacta de la coincidencia de palabras. Puede ser mejor usar \bword\b o \bword|word\b en determinadas situaciones.

    usuario166390

    2 de febrero de 2012 a las 20:05


Avatar de usuario de Marc B
marc b

if (strpos($string, $word) === FALSE) {
   ... not found ...
}

Tenga en cuenta que strpos() distingue entre mayúsculas y minúsculas, si desea una búsqueda que no distinga entre mayúsculas y minúsculas, utilice stripos() en cambio.

También tenga en cuenta el ===, obligando a una estricta prueba de igualdad. strpos PUEDE devolver un válido 0 si la cadena de ‘aguja’ está al comienzo del ‘pajar’. Al forzar una verificación de un falso booleano real (también conocido como 0), elimina ese falso positivo.

  • tenga en cuenta que %palabra% es un comodín, no una variable… la $cadena contiene una dirección IP en forma de caracteres, como $cadena = 123.456.789.100, y quiero excluir (NO ME GUSTA) aquellas que comienzan con 123.456%

    –Lucas Matos

    2 de febrero de 2012 a las 20:06


  • @LucasMatos Entonces $word = "word" entonces… si bien es un comodín, es un uso muy trivial (“extremos flotantes”) que strpos cubre (y de hecho es porque de esto que strpos funciona aquí!). $word = "a?b" no funcionaría con este enfoque, si ? estaba destinado a “coincidir con cualquier carácter”, por ejemplo

    usuario166390

    2 de febrero de 2012 a las 20:10


  • @LUcas: debería haberlo dicho en la pregunta, entonces. Los ejemplos simples obtienen respuestas simples.

    – Marc B.

    2 de febrero de 2012 a las 20:14

  • así es como se ve mi oración if ($viewer_ip AND $viewer_ip != $last_viewer_ip AND strpos($viewer_ip, 66.249) === false) { quiero excluir las ips de bot de google de mi contador. solo tengo que esperar que uno de ellos llegue a mi sitio para verificar si funciona correctamente. gracias a todos

    –Lucas Matos

    2 de febrero de 2012 a las 20:25

  • tenga mucho cuidado con un número de punto flotante ‘desnudo’ como ese. PHP puede encadenarlo con decimales finales diferentes de lo que cabría esperar. Forzarlo a ser una cadena con 66.249 en cambio, y no es que ENCONTRARÁ cosas como 166.249. Si ese es el INICIO de la cadena, puede cambiar el === a un simple > en su lugar, para excluir cualquier coincidencia al principio.

    – Marc B.

    2 de febrero de 2012 a las 21:46


Usar strpos. Si no se encuentra la cadena, devuelve falsede lo contrario algo que no es false. Asegúrese de utilizar una comparación de tipo seguro (===) como 0 puede ser devuelto y es un valor falso:

if (strpos($string, $substring) === false) {
    // substring is not found in string
}

if (strpos($string, $substring2) !== false) {
    // substring2 is found in string
}

use 

if(stripos($str,'job')){
   // do your work
}

  • Esto fallará cuando job son los tres personajes principales de $str. Si corrige este fragmento sin explicación, se convertirá en una respuesta duplicada en esta página. Esta publicación es segura de eliminar.

    – mickmackusa

    22 de abril de 2021 a las 2:42

<?php
//  Use this function and Pass Mixed string and what you want to search in mixed string.
//  For Example :
    $mixedStr = "hello world. This is john duvey";
    $searchStr= "john";

    if(strpos($mixedStr,$searchStr)) {
      echo "Your string here";
    }else {
      echo "String not here";
    }

Depende un poco de tus datos, ¿no? strpos(‘una idea tonta’,’tonto’) mostrará una coincidencia, pero puede que no sea lo que quieres. Si se trata de palabras, tal vez

preg_match(“!\b$palabra\b!i”,$frase)

es más sabio Solo un pensamiento.

  • Y si $word contiene caracteres especiales? Esta respuesta muestra cómo hacer coincidir una palabra completa. La pregunta preguntaba cómo determinar si una subcadena no está presente en una cadena de entrada.

    – mickmackusa

    31 de enero a las 4:13


  • Y si $word contiene caracteres especiales? Esta respuesta muestra cómo hacer coincidir una palabra completa. La pregunta preguntaba cómo determinar si una subcadena no está presente en una cadena de entrada.

    – mickmackusa

    31 de enero a las 4:13


¿Ha sido útil esta solución?