Funktion strpbrk() - Zeichen aus einer Liste im String suchen

Zeichenketten müssen häufig dahingehend geprüft werden, ob sie ein oder mehrere Zeichen enthalten. Ein Beispiel hierfür ist die E-Mailadresse, die auf das Vorhandensein des Zeichens @ geprüft wird. Wenn man prüfen will, ob eine Zeichenkette ein Zeichen aus einer Auswahl enthält, dann kann man hierfür die Funktion strpbrk() verwenden. Sie funktioniert im Grunde genauso wie die Funktion strstr(), nur mit dem Unterschied, dass man bei strpbrk() eine Auswahl aus mehreren einzelnen Zeichen angeben kann. Sobald ein Zeichen aus der Auswahl in der Zeichenkette gefunden wird, wird der Rest der Zeichenkette inkl. dem gefundenen Zeichen zurückgegeben wird. Innerhalb der runden Klammern werden die Parameter wie folgt angegeben.

  1. Die Zeichenkette, in der nach dem Teil-String gesucht werden soll (haystack).
  2. Eine Liste mit den Zeichen, nach denen gesucht werden soll (char_list).

Beim folgenden Beispiel wird nach dem Zeichen @ oder nach einem Punkt gesucht.

<?php

$str = 'emailadresse@provider.xyz';
$list = '@.';

// Ausgabe @provider.xyz
echo strpbrk($str, $list);

?>

Welches Zeichen zuerst gefunden wird, ist ausschlaggebend. Bei der Gegenprobe im folgenden Beispielcode wird nach email ein Punkt gesetzt und der Rückgabewert ist in dem Fall .adresse@provider.xyz.

<?php

$str = 'email.adresse@provider.xyz';
$list = '@.';

// Ausgabe .adresse@provider.xyz
echo strpbrk($str, $list);

?>

Die Funktion ist case-sensitive, sodass die Groß- und Kleinschreibung berücksichtigt wird. Beim folgenden Beispielcode wird das Zeichen E nicht gefunden, obwohl der Kleinbuchstabe e in der Zeichenkette enthalten ist.

<?php

$str = 'emailadresse@provider.xyz';
$list = 'E';

// Ausgabe
echo strpbrk($str, $list);

?>

Falls kein Zeichen aus der Liste gefunden wird, ist der Rückgabewert FALSE (Datentyp bool). Wenn man nach dem Zeichen 0 suchen lässt, kann es bei einer evtl. anschließenden if-, else-Abfrage auf FALSE mit dem Vergleichsoperator == zu einer Unstimmigkeit kommen. Denn, falls das Zeichen 0 gefunden wird und zuletzt in der Zeichenkette vorkommt, ist der Rückgabewert 0 vom Datentyp string.

Bei einer anschließenden Abfrage mit dem Vergleichsoperator == wird der Rückgabewert 0 vom Datentyp string jedoch als FALSE vom Typ bool ausgewertet. In solchen Fällen kann man als Vergleichsoperator === verwenden. Damit wird auch der Datentyp des Rückgabewerts ausgewertet.

<?php

$str = 'ABCD3210';
$list = '0';

// Rückgabewert in $a speichern
$a = strpbrk($str, $list);

if ($a === FALSE)
{
  echo 'Zeichen nicht gefunden';
}
else
{
  echo 'Zeichen gefunden';
}

?>

Mit diesem Beispielcode wird am Bildschirm Zeichen gefunden ausgegeben. Bei einer Gegenprobe mit dem Vergleichsoperator == wird dagegen am Bildschirm Zeichen nicht gefunden ausgegeben.