Er zijn verschillende methoden om in PHP te controleren of een bepaald teken voorkomt in een string. Je kunt preg_match() gebruiken, maar dat is meteen ook een heel zware en (als je niet zoveel ervaring hebt met reguliere expressies) ook een lastige. Beter is strstr() of stristr(). Maar je kunt ook kiezen voor strpos().
Er zit daarbij echter wel een flinke adder onder het gras. Deze functie is namelijk niet bedoelt om te achterhalen óf een teken voorkomt, waar wáár hij voorkomt. De volgende code kan daarom tot problemen leiden:
if (strpos($string,'a')) {
//
}
Zolang de 'a' niet het eerste teken in de string is, is er geen probleem. Maar stel dat de string begint met een 'a'. Wat levert strpos() dan op? '0' (nul). En dus wordt er niet aan de conditie voldaan terwijl de 'a' wel voorkomt. En dat is natuurlijk niet de bedoeling.
Oplossing:
if (strpos($string,'a') !== false) {
//
}
Nu wordt er wel aan de conditie voldaan als de string begint met een 'a'.
Dit illustreert maar weer eens hoe belangrijk het is om altijd goed na te denken of je bij een controle verschil moet maken tussen een nul, een lege string en false. Vaak hoeft dat niet. Soms wel.
Reacties