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

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

W powyższym kodzie próbuję wymrzeć skrypt, gdy nazwa pliku nie zawiera ciągu tekstowego "my_upgrade". Jednak w podanym przykładzie nie powinien on umrzeć, ponieważ "my_upgrade (1) .zip" zawiera ciąg "my_upgrade".Jak używać strpos do określania, czy łańcuch znaków istnieje w łańcuchu wejściowym?

Czego mi brakuje?

+0

strpos zwraca pozycję liczbową dopasowania. Nie jestem pewien, czy to pomaga. –

Odpowiedz

31

strpos zwraca false, jeśli ciąg nie zostanie znaleziony i 0, jeśli zostanie znaleziony na początku. Użyj identity operator odróżnić dwa:

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

Nawiasem mówiąc, fakt ten jest udokumentowany z czerwonym tle i wykrzyknikiem w official documentation.

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

W strpos functionDocs powraca false jeśli nie znaleziono lub 0 jeśli znalezione na stanowisku 0 (programiści lubią rozpocząć liczenie na 0 często):

Warning Ta funkcja może zwrócić Boolean FALSE, ale może również zwraca wartość inną niż boolowska, która jest równa FALSE, taka jak 0 lub "". Więcej informacji można znaleźć w rozdziale dotyczącym Booleans. Użyj operatora === do przetestowania zwracanej wartości tej funkcji.

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

przeciwnym razie strpos powróci 0 (indeks dopasowania), który jest false.

Operator === także porównać typ zmiennych (logiczna! = Liczba całkowita)

0

strpos w tym przypadku zwróci zero, która jest następnie interpretowana jako false gdy robisz logiczną negację. Powinieneś sprawdzić jawnie dla boolean false.

1

Funkcja strpos() rozróżnia wielkość liter.

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

Do wykorzystania od wielkości liter. użyj stripos(), aby znaleźć pozycję pierwszego wystąpienia ciągu wewnątrz innego ciągu znaków (bez rozróżniania wielkości liter)

Powiązane problemy