Bei der Verarbeitung von Benutzereingaben spielt die Groß- und Kleinschreibung oft keine Rolle. Wenn ein Besucher „php“ statt „PHP“ in ein Suchfeld eingibt, soll trotzdem das richtige Ergebnis erscheinen. PHP bietet dafür mehrere Möglichkeiten.
Der i-Modifier bei preg_match()
Der einfachste Weg, die Groß- und Kleinschreibung in einem regulären Ausdruck zu ignorieren, ist der i-Modifier. Er wird am Ende des Patterns angehängt:
<?php
$text = 'Das ist ein PHP Tutorial.';
/* Suche nach "php" ohne Beruecksichtigung
der Gross- und Kleinschreibung */
if (preg_match('/php/i', $text)) {
echo 'Treffer gefunden!';
}
?>
Die Ausgabe lautet Treffer gefunden!, obwohl im Text „PHP“ in Großbuchstaben steht und das Suchmuster php klein geschrieben ist. Der i-Modifier sorgt dafür, dass Groß- und Kleinbuchstaben gleich behandelt werden.
Beispiel: Mehrere Schreibweisen finden
Der i-Modifier funktioniert mit beliebigen regulären Ausdrücken. Hier ein Beispiel, das verschiedene Schreibweisen in einem Array findet:
<?php
$texte = [
'PHP ist eine Scriptsprache',
'Ich lerne gerade php',
'Python ist auch beliebt',
'Mit Php kann man Webseiten bauen'
];
foreach ($texte as $zeile) {
if (preg_match('/php/i', $zeile)) {
echo $zeile . PHP_EOL;
}
}
?>
Alle drei Zeilen mit „PHP“, „php“ und „Php“ werden gefunden. Nur die Zeile mit „Python“ wird übersprungen, da sie kein „php“ enthält.
Alternativen ohne reguläre Ausdrücke
Für einfache Suchen ohne komplexe Muster gibt es schnellere Funktionen, die von Haus aus die Groß- und Kleinschreibung ignorieren.
stripos() für die Positionssuche
Die Funktion stripos() sucht eine Zeichenkette in einer anderen, ohne auf die Schreibweise zu achten. Sie gibt die Position des ersten Treffers zurück oder false, wenn nichts gefunden wird:
<?php
$text = 'Willkommen auf PHP-Space!';
$pos = stripos($text, 'php-space');
if ($pos !== false) {
echo 'Gefunden an Position: ' . $pos;
}
/* Ausgabe: Gefunden an Position: 16 */
?>
Die verwandte Funktion stristr() gibt statt der Position den Teil des Strings ab dem Treffer zurück.
mb_strtolower() für den Vergleich
Wenn beide Strings vor dem Vergleich in Kleinbuchstaben umgewandelt werden, funktioniert auch ein direkter Vergleich. Bei Texten mit Umlauten ist mb_strtolower() die bessere Wahl gegenüber strtolower():
<?php
$eingabe = 'MÜNCHEN';
$vergleich = 'münchen';
if (mb_strtolower($eingabe) === $vergleich) {
echo 'Texte stimmen überein.';
}
?>
Hinweis zu sql_regcase()
In älteren PHP-Versionen gab es die Funktion sql_regcase(), die einen String automatisch in einen Klammerausdruck wie [Pp][Hh][Pp] umwandelte. Diese Funktion wurde in PHP 5.3 als veraltet markiert und in PHP 7.0 komplett entfernt. Die oben gezeigten Methoden sind der moderne und empfohlene Ersatz.