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

<?php
class LevelGold{
    // 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;
    }

    // Ist das Feld obligatorisch
    function isRequired($name, $duty, $cleanStr) {

        switch ($duty) {
            case "notEmpty":
                if (empty($cleanStr )) {
                    $this -> hasErrors = true;
                    $this -> errorsArr[] = $name.": Das Feld darf nicht leer sein.";
                    return false;
                }
                else {
                    return true;
                }
            case "min3":
                // Minimale Anzahl der Zeichen
                $min = 3;
                $nrChars = strlen($cleanStr);
                if ($nrChars < $min) {
                    $this -> hasErrors = true;
                    $this -> errorsArr[] = $name.": Der eingegebene Begriff ist zu kurz.";
                    return false;
                }
                else {
                    return true;
                }
            case "str":
                return true;

        }
    }

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

        $goOn = $this -> isRequired($name, $duty, $cleanStr);

        if ($goOn) {
            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.";
		}
	}
}