Um die Anzahl von Übereinstimmungen zu ermitteln böte sich preg_match_all
an:
Rückgabewerte: Gibt die Anzahl der Übereinstimmungen mit dem kompletten Suchmuster zurück (die auch Null sein kann). Bei einem Fehler wird false zurückgegeben...
z.B. mit \pL
für UTF-8 oder eben [A-Za-z]
für ASCII letters wie von Rolf beschrieben.
if(preg_match_all('~\pL~u', $str) >= 3)
{
// tu was
}
Siehe Beispiel bei Tio.run (Try it Online).
Bezüglich \pL
für die Unicode Kategorie hier noch der Hinweis, dass dies eine PCRE-spezifische (ev. auch ECMAScript>=2018) Kurzschreibweise für \p{L}
ist, welche ebenso in anderen Regex flavors, wie z.B. #C/.NET oder JAVA zur Verfügung steht. Letzteres ist jedenfalls mehr kompatibel.
PS: Bei UTF-8 empfiehlt es sich, das u
(PCRE_UTF8) flag für die preg* Funktionen zu verwenden.