Hallo Sven,
wenn ich Dich wörtlich nehme, d.h. Du willst nur prüfen, OB drei Buchstaben drin sind, könnte man ganz naiv so testen:
if (preg_match("/([a-z].*){3,}/i", $text)) {
echo "Mindestens 3 Buchstaben gefunden";
}
Die Angabe {3,}
besagt: das Element links von mir muss mindestens dreimal vorkommen.
Das i am Ende des Patterns heißt "case insensitive", dadurch kommen außer a-z auch A-Z mit.
Natürlich beginnt nun die Überlegung, was ein "Buchstabe" ist. a.z und A-Z ist die ASCII Antwort, bereits die deutsche Antwort ist anders und wenn es international wird, beginnt das Drama.
Die Regex-Characterklasse \w hilft Dir nichts, weil sie auch Ziffern beinhaltet.
Wenn Du nur die Buchstaben der deutschen Sprache finden willst, könntest Du verleitet sein, für ein Zeichen [a-zA-ZäöüÄÖÜß]
hinzuschreiben, und fällst auf die Nase bei Fremdwörtern wie Café oder einer Schreibweise wie GROẞHANDEL (da ist das ß in seiner Großschriftvariante ẞ drin).
Die universellste Alternative wäre die Verwendung von \pL - das wäre die Unicode-Zeichenkategorie "Letter" in all ihren Variationen. Das könnte dann aber wieder zu viel sein, denn ein "Letter" im Unicode sind auch kyrillische oder thailändische Buchstaben.
Also: Um deine Frage zu beantworten, müsstest Du erstmal festlegen, was für deinen Anwendungsfall ein "Buchstabe" sein soll.
Die Frage ist dann auch, ob Du die Positionen der gefundenen Buchstaben brauchst, und ob es wichtig ist, ob sie beieinander stehen.
Rolf
sumpsi - posui - obstruxi