PHP: strpos no verificó la primera palabra
Frecuentes
Visto 7,235 veces
6
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.
6 Respuestas
15
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
6
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
5
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
3
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
3
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
1
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 php or haz tu propia pregunta.
Consulte la advertencia en el manual de PHP para esa función. Insinuación:
===
(Tres): php.net/strpos - hakre¡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 >.> - aquatorrentBueno, 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. - hakre
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 :) - aquatorrent