PHP: strpos no verificó la primera palabra

Estoy tratando de hacer alguna validación en PHP, y uno de ellos está comprobando si hay una palabra específica en la cadena ingresada o no. El problema es que mi código parece no funcionar cuando pongo la palabra especificada primero.

aquí está el código:

$word = "aa bb cc dd";
if(strpos($word, 'aa') == false)
{
    echo "wrong input";
}

pero si cambio el $word a cualquiera bb aa cc dd or bb cc dd aa, funciona. Sin embargo, me pregunto cómo solucionar esto.

preguntado el 03 de mayo de 12 a las 18:05

Consulte la advertencia en el manual de PHP para esa función. Insinuación: === (Tres): php.net/strpos -

¡Gracias por tu ayuda! Sin embargo, no conozco el sitio web del manual antes, así que estoy recibiendo strpos de otro sitio (que los ejemplos no usan === . es por eso que estaba confundido con esto :) ¡aunque gracias por todas las respuestas! ^^ realmente ayudan. Me pregunto por qué obtengo menos solo porque pregunto esto >.> esos menos me desalientan a hacer preguntas cada vez que estoy confundido >.> -

Bueno, si se confunde con una función específica, consulte el manual y lea primero, al menos le sugiero eso. Puede preguntar lo que quiera, un día puede hacer una gran pregunta y obtener muchos votos a favor. O colocas alguna buena respuesta. -

desde que obtuve el enlace ahora, creo que lo revisaré primero en lugar de buscar sin saber lo que quería buscar :) gracias por la sugerencia, intentaré hacer eso :) -

6 Respuestas

strpos devolverá falso si su cadena no está allí. De lo contrario, devuelve la posición de su cadena.

En este caso, 'aa' está al principio de la cadena, lo que significa que está en la posición 0; y 0 se evalúa como falso.

Necesitas hacer una comparación booleana en el resultado:

if(strpos($word, 'aa') === false)

contestado el 03 de mayo de 12 a las 18:05

También tenga en cuenta que si está usando === verdadero, entonces tener su lógica en la declaración if, no funciona. Será mejor que use === falso, luego tenga su lógica en la declaración else. - james as

Eso es porque strpos devuelve la posición de la palabra, en este caso 0. 0 es falso. == no busca coincidencias idénticas, === lo hace. Así que usa un triple igual.

incluso está en los docs.

contestado el 03 de mayo de 12 a las 18:05

lo siento, pero solo conozco el sitio de documentos cuando lo dijiste en esta publicación :) ¡pero funciona! Gracias :) - aquatorrent

strpos devuelve 0, ya que 'aa' es el carácter 0. Como 0 == false pero NO === falso (no es booleano), necesita usar === en lugar de ==.

contestado el 03 de mayo de 12 a las 18:05

Debe usar el operador de comparación estricto, esto coincidirá con el mismo tipo, por lo que usar === comprobará si es un booleano:

if(strpos($word, 'aa') === false)
{
    echo "wrong input";
}

Usar == es una comparación suelta, cualquier cosa puede ser declarada verdadera (aparte de true, 1, string), p.ej

"false" == false    // true
"false" === false   // false

La razón por la que es falso es porque está comparando una cadena con un valor booleano que devuelve falso.

contestado el 03 de mayo de 12 a las 18:05

Porque la posición de aa es 0, que iguales a false.

Tienes que usar: if(strpos($word, 'aa') === false)

contestado el 03 de mayo de 12 a las 18:05

Agregue un espacio antes de la cadena de búsqueda y encuentre más de 0 posiciones

if(strpos(" ".$word, 'aa') > 0)
{
    echo "Found it!";
}

Respondido 23 Oct 19, 09:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.