web-dev-qa-db-fra.com

Comment utiliser strpos pour déterminer si une chaîne existe dans une chaîne d'entrée?

$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';

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

Dans le code ci-dessus, j'essaie de désactiver le script lorsque le nom du fichier ne contient pas la chaîne de texte "my_upgrade". Cependant, dans l'exemple donné, il ne devrait pas mourir, car " my_upgrade (1) .Zip " contient la chaîne " my_upgrade ". 

Qu'est-ce que je rate?

16
Scott B

strpos renvoie false si la chaîne n'est pas trouvée et 0 si elle se trouve au début. Utilisez le opérateur d'identité pour distinguer les deux:

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

Au fait, ce fait est documenté avec un fond rouge et un point d’exclamation dans la documentation officielle .

43
phihag
if (strpos($filename, $match) === false)

Sinon, strpos retournera 0 (l'index de la correspondance), qui est false.

L'opérateur === comparera également le type des variables (boolean! = Integer)

5
Maxime Fafard

La fonction strpos() est sensible à la casse.

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

Pour utiliser la casse. use stripos() qui trouve la position de la première occurrence d'une chaîne dans une autre chaîne (insensible à la casse) 

3
Rishabh
false === strpos($filename, $match)

La fonction strposDocs retourne false s'il n'est pas trouvé ou 0 s'il est trouvé à la position 0 (les programmeurs aiment commencer à compter à 0 souvent):

Warning Cette fonction peut renvoyer Boolean FALSE, mais peut également renvoyer une valeur non-booléenne évaluée à FALSE, telle que 0 ou "". Veuillez lire la section sur les booléens pour plus d'informations. Utilisez l'opérateur === pour tester la valeur de retour de cette fonction.

2
hakre

Cela fonctionne pour moi quand tout autre échoue dans certaines situations:

$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
    {
    $checker == true;
    }
if ($checker === false)
{ 
die();
}
else 
{
//proceed
}

Ou en bref:

$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
    {
    $checker == true;
//proceed
 }
if ($checker === false)
{ 
die();
}
0
Atanas Atanasov