<?php

/**
 * Prüft, ob ein Vor- oder Nachname gültig ist.
 *
 * Erlaubt werden Buchstaben, Umlaute, Leerzeichen und Bindestriche.
 * Die Länge muss zwischen 2 und 20 Zeichen liegen.
 *
 * @param string $name Zu prüfender Name
 *
 * @return bool true wenn der Name gültig ist, sonst false
 */
function userNameValidator($name)
{
    $name = trim($name);
    $namePattern = '/^[a-zA-ZäöüÄÖÜß\s-]{2,20}$/u';

    return preg_match($namePattern, $name) === 1;
}

/**
 * Prüft, ob eine E-Mail-Adresse gültig ist.
 *
 * Die E-Mail-Adresse muss dem Standardformat entsprechen
 * und darf höchstens 100 Zeichen lang sein.
 *
 * @param string $email Zu prüfende E-Mail-Adresse
 *
 * @return bool true wenn die E-Mail-Adresse gültig ist, sonst false
 */
function userEmailValidator($email)
{
    $email = trim($email);

    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false
        && mb_strlen($email) <= 100;
}

/**
 * Prüft, ob ein Passwort die Längenanforderungen erfüllt.
 *
 * Das Passwort muss zwischen 5 und 12 Zeichen lang sein.
 *
 * @param string $password Zu prüfendes Passwort
 *
 * @return bool true wenn das Passwort gültig ist, sonst false
 */
function userPasswordValidator($password)
{
    $zeichenAnzahl = mb_strlen($password);

    return $zeichenAnzahl >= 5 && $zeichenAnzahl <= 12;
}

/**
 * Prüft ein optionales Passwort.
 *
 * Ein leeres Passwort ist erlaubt und bedeutet,
 * dass das bestehende Passwort unverändert bleibt.
 * Falls ein Passwort angegeben wurde, wird es
 * mit den normalen Passwortregeln geprüft.
 *
 * @param string|null $password Zu prüfendes Passwort
 *
 * @return bool true wenn das Passwort gültig oder leer ist,
 *              sonst false
 */
function userOptionalPasswordValidator($password)
{
    if (!isset($password) || $password === '') {
        return true;
    }

    return userPasswordValidator($password);
}