PHP prüfen, ob Wort vorkommt in Variable

xep22

Banned
Registriert
Apr. 2018
Beiträge
395
hallo,

folgenden Code nutze ich normal immer um zu schauen ob ein bestimmtes Wort in einer Variable vorkommt :

Code:
$message='TriGGer';

if(strpos(strtolower($message), 'trigger'))
{
    echo "Getriggert.";
}else{
    echo "Was?";
}

Normal müsste das jetzt zutreffen, erhalte aber "Was?"... wenn ich jetzt irgendein Zeichen noch vor den Wert der Variable $message setze geht es auch, also das :

Code:
$message='.TriGGer';

if(strpos(strtolower($message), 'trigger'))
{
    echo "Getriggert.";
}else{
    echo "Was?";
}

Wieso ist das so ? was muss ich ändern ?
 
https://www.php.net/manual/en/function.strpos.php

1586983325418.png
 
  • Gefällt mir
Reaktionen: tollertyp
PHP:
if(strpos(strtolower($message), 'trigger') === false)
{
    echo "Was?";
}else{
    echo "Getriggert.";
}
 
Heißt, dass wenn du nicht mal in der Lage bist, auf der verlinkten Seite nach unten zu scrollen, sich mal die Beispiele anzuschauen, dass es ein schwerer Weg für dich wird.
 
  • Gefällt mir
Reaktionen: hongkongfui und bog
PHP:
<?php
foreach ([
             "1 == true",
             "1 === true",
             "0 == false",
             "0 === false",
             "strpos(strtolower('TriGGer'), 'trigger')",
             "strpos(strtolower('TriGGer'), 'trigger') != 0",
             "strpos(strtolower('TriGGer'), 'trigger') !== 0",
             "strpos(strtolower('TriGGer'), 'trigger') != false",
             "strpos(strtolower('TriGGer'), 'trigger') !== false",
             "strpos(strtolower('TriGGer'), 'foo')",
             "strpos(strtolower('TriGGer'), 'foo') != 0",
             "strpos(strtolower('TriGGer'), 'foo') !== 0",
             "strpos(strtolower('TriGGer'), 'foo') != false",
             "strpos(strtolower('TriGGer'), 'foo') !== false",
             "strpos(strtolower('.TriGGer'), 'trigger')"
         ] as $cmp) {
    echo "$cmp => ".var_export(eval("return $cmp;"), true)."\n";
}
Code:
1 == true => true
1 === true => false
0 == false => true
0 === false => false
strpos(strtolower('TriGGer'), 'trigger') => 0
strpos(strtolower('TriGGer'), 'trigger') != 0 => false
strpos(strtolower('TriGGer'), 'trigger') !== 0 => false
strpos(strtolower('TriGGer'), 'trigger') != false => false
strpos(strtolower('TriGGer'), 'trigger') !== false => true
strpos(strtolower('TriGGer'), 'foo') => false
strpos(strtolower('TriGGer'), 'foo') != 0 => false
strpos(strtolower('TriGGer'), 'foo') !== 0 => true
strpos(strtolower('TriGGer'), 'foo') != false => false
strpos(strtolower('TriGGer'), 'foo') !== false => false
strpos(strtolower('.TriGGer'), 'trigger') => 1
 
  • Gefällt mir
Reaktionen: DubZ, BeBur und tollertyp
Doku lesen und die weiterführenden Links in der roten Box anklicken (vor allem, wenn man nicht weiß was gemeint ist) - dann ist das alles logisch. Wenn er zukünftig gleich bei allen Vergleichen auf Typsicherheit prüft, haben wir wieder einen mehr, der korrekt prüft und nich solche Wischiwaschivergleiche aufstellt.
 
xep22 schrieb:

Probier mal, was passiert, wenn Du Umlaute oder Sonderzeichen in Message/Signal (Trigger) packst ...
PHP:
 $message = 'TriGGer';
 $signal = 'trigger';

echo
   is_numeric(strpos(strtolower($message), $signal)) ?
   "strpos Getriggert\n" :
   "Was?\n";

echo
   preg_match('/'.preg_quote($signal,'/').'/iu', $message) ?
   "preg Getriggert\n" :
   "Was?\n";
 
Zurück
Oben