Lightweight-PHP-Validator: Neue Version

Neue Features:
– Unterstützung von Fehlermeldungen
– Mehrsprachigkeit (deutsch / englisch) über Annotations
– Manuelles Festlegen einer Validierungsklasse

Definition der Fehlermeldungen über Annotations:
In der Validierungsklasse „ValidatorRules“ können die Fehlermeldungen in beliebig vielen Sprachen mit Hilfe von Annotations hinterlegt werden.

/**
 * @ErrorMessage[lang=de] Bitte geben Sie eine Zahl an, die kleiner ist als %.2f.
 * @ErrorMessage[lang=en] Please enter a number less than %.2f.
 */

public function check_less_than($mValue, $aParams)
{
    return (number_format($mValue, 15) < $aParams[0]);
}

Sprache festlegen:
Die Sprache in der die Fehlermeldungen zurückgegeben werden sollen, lässt sich im Validator ganz einfach über die Funktion „setLanguage“ festlegen.

$oValidator = new Validator();
$oValidator->setLanguage('de'); //Deutsch

Validieren und Fehlermeldung auslesen:
Die jeweilige Fehlermeldung kann direkt nach der Validierung über die Funktion „getLastErrorMessage“ ermittelt werden.

$oValidator->setLanguage('de');
$oValidator->isValid("15", 'less_than[10.90]'); //false
echo $oValidator->getLastErrorMessage();
//Bitte geben Sie eine Zahl an, die kleiner ist als 10.90.

//Nochmal auf Englisch
$oValidator->setLanguage('en');
$oValidator->isValid("15", 'less_than[10.90]'); //false
echo $oValidator->getLastErrorMessage();
//Please enter a number less than 10.90.

Lightweight-PHP-Validator: Neue Version weiterlesen

Lightweight Validator in PHP

Ziel war es, mit wenig Zeilen einen möglichst einfach zu verwendenden Validator zu schaffen, der sich zudem einfach erweitern lässt und ohne viele Abhängigkeiten auskommt. Daraus entstanden ist folgendes:

Anwendungsbeispiel:

//Anwendungsbeispiel
$oValidator = new Validator();

$oValidator->isValid("http://sklueh.de", 'url'); //true
$oValidator->isValid("http:/%$$^1sklueh.de", 'url');//false
$oValidator->isValid("http://sklueh.de", 'url|min_length[16]|max_length[20]|required'); //true
$oValidator->isValid("http://sklueh.de", 'url|min_length[17]|max_length[20]|required'); //false
$oValidator->isValid("http://sklueh.de", 'url|min_length[10]|max_length[15]|required'); //false
$oValidator->isValid("39.91", 'greater_than[39.90]'); //true
$oValidator->isValid("40", 'greater_than[39.90]'); //true
$oValidator->isValid("39.90", 'greater_than[39.90]'); //false
$oValidator->isValid('2', 'match[1,2]'); //true
$oValidator->isValid('3', 'match[1,2,5,7]'); //false
$oValidator->isValid('o_O?', 'match[lol,rofl,o_O?,lololol,l000000l]'); //true
$oValidator->isValid(md5('my_password'), 'equals['.md5('my_password').']'); //true
$oValidator->isValid(md5('my_password'), 'equals['.md5('my_wrong_password').']'); //false
$oValidator->isValid("1.1.2012", 'date'); //true
$oValidator->isValid("30.2.2012", 'date'); //false
$oValidator->isValid("2.2012", 'date'); //false

Validator
Diese Klasse kümmert sich um die Interpretation der Suchmuster.

class Validator
{
    public function isValid($mValue, $mPattern)
    {
        $aPatterns = explode("|", $mPattern);
       
        foreach( (array) $aPatterns as $sRule) //Alle definierten Regeln durchlaufen
        {
            $aRuleParams = $this->detachParams("[", "]", $sRule); //Zusätzliche Parameter von dem Regel-String lösen
            $oReflectionMethod = new ReflectionMethod($sValidationClass = "ValidatorRules", 'check_'.$sRule);
            if(!$oReflectionMethod->invoke(new $sValidationClass(), $mValue, $aRuleParams)) return false; //Methode für Validierung aufrufen
        } return true;
    }
   
    public function detachParams($cFirstChar, $cSecondChar, &$sRule)
    {
        preg_match_all("/\".$cFirstChar."(.*?)\".$cSecondChar."/", $sRule, $aMatches);
        $sRule = preg_replace("
/\\[(.*?)\\]/", "", $sRule);
        return $aMatches[1];
    }
}

Lightweight Validator in PHP weiterlesen