PHP 4.3

7.2 Position einer Zeichenkette

strpos()

int = strpos(haystack, needle [,int offset])

Wir nehmen jetzt eine weitere PHP-Funktion zur Hilfe, mit der wir das Vorhandensein eines bestimmten Zeichens bzw. einer Zeichenkette innerhalb einer anderen Zeichenkette prüfen können: strpos(). Alternativ können Sie bei leicht veränderter Benutzung ebenso strchr() verwenden.

Die PHP-Funktion strpos() erwartet als Parameter die Zeichenkette, in der wir suchen möchten (die dem Heuhaufen entspricht) und die Zeichenkette, die wir suchen (die mit der Nadel vergleichbar ist). Optional können wir noch einen sogenannten Offset angeben, ab dem die Suche starten soll. Offset bedeutet in etwa Startposition - wir könnten also auch erst ab dem zehnten Zeichen der "Heuhaufen"-Zeichenkette mit der Suche beginnen.

strpos() versucht, das erste Vorkommen der Nadel im Heuhaufen zu ermitteln. Wenn strpos() die "Nadel"-Zeichenkette finden kann, wird die entsprechende Zeichenposition als Integer zurückgeliefert. Es wird bei strpos() analog zu Arrays die erste Position als 0 gezählt. Kann die Position nicht gefunden werden, gibt strpos() false zurück. Bitte beachten Sie in diesem Zusammenhang, dass Sie innerhalb einer if-Abfrage nicht zwischen dem Rückgabewert 0 (Zeichen befindet sich gleich an erster Stelle) und false unterscheiden können, da der Boolean false in PHP auch mit 0 ausgedrückt werden kann. Sie sollten in diesem Fall mit dem Ausdruck === false arbeiten.

Um die Überprüfung der E-Mailadresse zu verfeinern, werden wir im nachfolgenden Skript das Vorhandensein des @-Zeichens und eines Punkts überprüfen. Dabei darf sich das @-Zeichen nicht an erster Stelle befinden, weil davor mindestens ein Zeichen für den Benutzernamen reserviert ist. Zwischen dem @-Zeichen und dem Punkt muss wiederum ein Abstand von mindestens einem Zeichen gegeben sein, da eine Domain aus mindestens einem Zeichen bestehen muss. Zusätzlich prüfen wir die Differenz zwischen der gesamten Zeichenlänge und dem Punkt. Auf diese Weise erfahren wir, ob die Top-Level-Domain aus mindestens zwei Zeichen besteht.

Skriptbeispiel strpos()
<?php

  $email = "info@teia.de";
  $at_pos = strpos($email, "@");
  $dot_pos = strpos($email, ".");

  if(strlen($email) < 6 || $at_pos < 1 || ($dot_pos - $at_pos) < 1 || (strlen($email) - $dot_pos) < 3) {
    echo "Die angegebene E-Mailadresse ist ungültig.<br>";
  } else {
    echo "Vielen Dank für die Angabe Ihrer E-Mailadresse.<br>";
  }

?>

Mit der angegebenen E-Mailadresse funktioniert das Skript schon sehr gut. Fehler werden Sie jedoch feststellen, wenn Sie eine E-Mailadresse angeben, die bereits im Namensteil einen Punkt enthält (z.B. peter.schulze@teia.de).
strpos() kann dadurch den Domainnamen nicht mehr korrekt ermitteln. Abhilfe schaffen wir, indem wir als drittes Argument der Funktion strpos() eine Startposition nach dem @-Zeichen festlegen, also $at_pos + 1.
Die entsprechende Zeile im Skript sieht dann so aus:

$dot_pos = strpos($email, ".", $at_pos + 1);


strrpos()

Die PHP-Funktion strrpos() (string reverse position) bewirkt nahezu das Gleiche wie die Funktion strpos(), jedoch mit dem Unterschied, dass strrpos() das letzte Vorkommen der "Nadel"-Zeichenkette in der "Heuhaufen"-Zeichenkette ermittelt. Allerdings kann die "Nadel" nicht aus einer Zeichenkette, sondern nur aus einem einzelnen Zeichen bestehen.

Mit strrpos() finden wir einen alternativen Ansatz zur Lösung des E-Mailsyntax-Problems: Wir suchen den Punkt einfach von hinten und finden damit den Punkt in der Domain vor einem eventuellen Punkt im Benutzernamen. Wir setzen zur Ermittlung der Punkt-Position statt strpos() also strrpos() ein, und können so auf die Angabe eines Startwertes verzichten:

$dot_pos = strrpos($email, ".");

Kommentare (0)

Ihr Kommentar

Name