PHP-Code in validierung_OOP/03_step/class/LevelSilver.class.php

<?php
class LevelSilver{
    // Flag für den Status der Validation
    public $hasErrors = false;
    // Array für die Fehlermeldungen
	public $errorsArr = [];

    // Schadcode herausputzen
    function desinfect($str) {
        $str1 = strip_tags($str);
        $str2 = preg_replace('/\x00|<[^>]*>?/', '', $str1);
        $str3 = str_replace(["'", '"'], ['&#39;', '&#34;'], $str2);
        $str4 = htmlspecialchars($str3);
        $str5 = trim($str4);
        return $str5;
    }

    // Weiche, das ist das Eingangstor zum Objekt
    function validate($name, $kind, $str) {
        // Aufruf der Methode desinfect(), bevor weiter gearbeitet wird
        $cleanStr = $this -> desinfect($str);

        switch($kind) {
            case "validMail";
                $this -> isEmailCorrect($name, $cleanStr);
            break;
            case "validPassword";
                $this -> isPasswordCorrect($name, $cleanStr);
            break;
            case "validUsername";
                $this -> isUsernameCorrect($name, $cleanStr);
            break;
        }

        return $cleanStr;
    }

    // Überprüfen, ob die E-Mail Adresse korrekt ist
    function isEmailCorrect($name, $str) {
        // Überprüfung mit einem PHP-Filter
		if (!filter_var($str, FILTER_VALIDATE_EMAIL)) {
			$this -> hasErrors = true;
            $this -> errorsArr[] = $name.": Die E-Mail-Adresse ist nicht gültig.";
		}
	}

    // Mit einem Regex überprüfen, ob das Passwort gültig ist 
    function isPasswordCorrect($name, $str) {
		$suchmuster = '/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@%&*-]).\S{8,}$/';
		if (!preg_match($suchmuster, $str)) {
			$this -> hasErrors = true;
            $this -> errorsArr[] = $name.": Das Passwort entspricht nicht den Vorgaben.";
		}
	}

    // Überprüfen, ob der Username den Vorgaben entspricht
    function isUsernameCorrect($name, $str) {
        // Minimale Anzahl der Zeichen im Usernamen
		$min = 4;
        // Maximale Anzahl der Zeichen im Usernamen
        $max = 16;
        
        // Hat es Leerschläge im Usernamen?
        // Achtung: str_contains() ist einfacher, geht erst ab PHP 8!

        $pos = strrpos($str, " ");
        if ($pos === false) {
            $nrChars = strlen($str);

		    if ($nrChars < $min) {
			    $this -> hasErrors = true;
                $this -> errorsArr[] = $name.": Der Username muss mindestens 4 Zeichen enthalten.";
            }
            if ($nrChars > $max) {
			    $this -> hasErrors = true;
                $this -> errorsArr[] = $name.": Der Username darf maximal 16 Zeichen enthalten.";
            }
        }
        else {
            $this -> hasErrors = true;
            $this -> errorsArr[] = $name.": Der Username darf keine Leerschläge enthalten.";
		}
	}
}