2011-08-08 20 views
11
$filename = 'my_upgrade(1).zip'; 
$match = 'my_upgrade'; 

if(!strpos($filename, $match)) 
    { 
    die(); 
    } 
else 
    { 
    //proceed 
    } 

En el código anterior, intento desaparecer del script cuando el nombre del archivo no contiene la cadena de texto "my_upgrade". Sin embargo, en el ejemplo dado, no debe morir dado que "my_upgrade (1) .zip" contiene la cadena "my_upgrade".¿Cómo usar Strpos para determinar si existe una cadena en la cadena de entrada?

¿Qué me estoy perdiendo?

+0

strpos devuelve la posición numérica de la coincidencia. No estoy seguro si eso ayuda. –

Respuesta

31

strpos devuelve false si no se encuentra la cadena, y 0 si se encuentra al principio. Utilice el identity operator para distinguir los dos:

if (strpos($filename, $match) === false) { 

Por cierto, este hecho está documentado con un fondo rojo y un signo de exclamación en el official documentation.

1
false === strpos($filename, $match) 

Los strpos functionDocs vuelve false si no se encuentra o 0 si se encuentran en la posición 0 (programadores gustaría empezar a contar a 0 a menudo):

Advertencia Esta función puede devolver booleana FALSE, pero puede también devuelve un valor no booleano que evalúa a FALSE, como 0 o "". Lea la sección sobre Booleanos para más información. Use el operador === para probar el valor de retorno de esta función.

4
if (strpos($filename, $match) === false) 

De lo contrario, strpos volverá 0 (el índice del partido), que es false.

=== El operador también comparará tipo de las variables (booleano! = Entero)

0

strpos en este caso se devolverá un cero, lo que es interpretado entonces como falsa cuando lo hace la negación lógica. Debería verificar explícitamente el booleano false.

1

La función strpos() distingue entre mayúsculas y minúsculas.

if(strpos($filename, $match) !== false) 
     { 
     // $match is present in $filename 
     } 
    else 
     { 
     // $match is not present in $filename 
     } 

Para usar mayúsculas y minúsculas. usa stripos() que encuentra la posición de la primera aparición de una cadena dentro de otra cadena (no distingue entre mayúsculas y minúsculas)

Cuestiones relacionadas