Guten Morgen Tommy
Dann versuch ich mich mal an einer Analyse...
in der Regex suche ich nach allen Zeichen in $_POST['vorname'] die nicht erlaubt sind:
\d = alle Zahlen
\W = sonstige Zeichen die keine Buchstaben sind (ein "á" wird so z.B. als gültig erkannt, könnte ja in einem Namen vorkommen)
_ = da bei "\W" das "_" nicht dabei ist, führe ich das extra auf. Ist also einfach ein Unterstrich.
Wenn eines dieser Zeichen enthalten ist, liefert preg_match() eine "(int) 1" zurück.
Bei einem gültigen String wird "(int) 0" geliefert .
Also könnte man jetzt sagen, wenn das Ergebnis "0" ist, ist es richtig:
if (0 == $Ergebnis) => richtig
Tatsächlich liefert preg_match() bei einem Fehler "false", was bei einem einfachen Vergleich auch "0" wäre:
if (0 == false == $Ergebnis) => richtig
--> Schlecht (wegen automatischer Typkonvertierung)
PHP bietet aber auch die Möglichkeit nicht nur den Wert, sondern auch den Typ in einem Vergleich überprüfen.
Man könnte jetzt also sagen: Wenn das Ergebnis "(int) 1" oder "(bool) false" ist, dann stimmt was nicht:
if ((1 === $Ergebnis) || (false === $Ergebnis)) => falsch
Oder vereinfacht im Umkehrschluss: Wenn das Ergebnis nicht "(int) 1" ist, ist es falsch:
if (0 !== $Ergebnis) => falsch
Man hätte natürlich auch sagen können, wenn Ergebnis "(int) 0" dann richtig:
if (0 === $Ergebnis) => richtig