php string auf wenigstens 3 Buchstaben prüfen
bearbeitet von
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:
~~~php
if (preg_match("/[a-z].*[a-z].*[a-z]/i", $text)) {
echo "Mindestens 3 Buchstaben gefunden";
}
~~~
Das i am Ende des Patterns heißt "case **i**nsensitive", 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
php string auf wenigstens 3 Buchstaben prüfen
bearbeitet von
Hallo Sven,
ganz naiv so:
~~~php
if (preg_match("/[a-z].*[a-z].*[a-z]/i", $text)) {
echo "Mindestens 3 Buchstaben gefunden";
}
~~~
Das i am Ende des Patterns heißt "case **i**nsensitive", 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