Вход Регистрация
Файл: includes/classes/Validation.php
Строк: 202
<?php
/**
 * Класс валидации данных
 * Выполняет простейшую валидацию данных, длина строк, размеры чисел, сравнение, наличие в списке итд
 * @license Code and contributions have MIT License
 * @link    http://visavi.net
 * @author  Alexander Grigorev <visavi.net@mail.ru>
 */
class Validation
{
    
/**
     * @var array validation errors
     */
    
private $errors = array();

    
/**
     * @var array validation rules
     */
    
private $validation_rules = array();

    
/**
     * the constructor, duh!
     */
    
public function __construct()
    {
    }

    
/**
     * run the validation rules
     *
     * return bool;
     */
    
public function run()
    {
        foreach (new 
ArrayIterator($this->validation_rules) as $opt) {
            switch (
$opt['type']) {
                case 
'string':
                    
$this->validateString($opt['var'], $opt['label'], $opt['min'], $opt['max'], $opt['required']);
                    break;

                case 
'numeric':
                    
$this->validateNumeric($opt['var'], $opt['label'], $opt['min'], $opt['max'], $opt['required']);
                    break;

                case 
'max':
                    
$this->validateMax($opt['var'], $opt['label']);
                    break;

                case 
'min':
                    
$this->validateMin($opt['var'], $opt['label']);
                    break;

                case 
'equal':
                    
$this->validateEqual($opt['var'], $opt['label']);
                    break;

                case 
'not_equal':
                    
$this->validateNotEqual($opt['var'], $opt['label']);
                    break;

                case 
'empty':
                    
$this->validateEmpty($opt['var'], $opt['label']);
                    break;

                case 
'not_empty':
                    
$this->validateNotEmpty($opt['var'], $opt['label']);
                    break;

                case 
'in':
                    
$this->validateIn($opt['var'], $opt['label']);
                    break;

                case 
'regex':
                    
$this->validateRegex($opt['var'], $opt['label'], $opt['required']);
                    break;

                case 
'float':
                    
$this->validateFloat($opt['var'], $opt['label'], $opt['required']);
                    break;

                case 
'url':
                    
$this->validateUrl($opt['var'], $opt['label'], $opt['required']);
                    break;

                case 
'email':
                    
$this->validateEmail($opt['var'], $opt['label'], $opt['required']);
                    break;

                case 
'bool':
                    
$this->validateBool($opt['var'], $opt['label'], $opt['required']);
                    break;

                case 
'custom':
                    
$this->validateCustom($opt['var'], $opt['label']);
                    break;

                default:
                    
$this->addError('Ошибка! Не найден тип правила "' $opt['type'] . '"');
            }
        }

        if (
$this->getErrors()) {
            return 
false;
        }

        return 
true;
    }

    
/**
     * add a rule to the validation rules array
     *
     * @param string $type     The type of variable
     * @param string $var      The variable
     * @param string $label    The label of variable
     * @param bool   $required If the field is required
     * @param int    $min      The minimum length or range
     * @param int    $max      The maximum length or range
     */
    
public function addRule($type$var$label$required false$min 0$max 0)
    {
        
$this->validation_rules[] = compact('type''var''label''required''min''max');
        return 
$this;
    }

    
/**
     * displays an error
     *
     * @param string $error The error text
     */
    
public function addError($error)
    {
        
$this->errors[] = $error;
    }

    
/**
     * Возвращает список ошибок
     *
     * @return array
     */
    
public function getErrors()
    {
        return 
$this->errors;
    }

    
/**
     * validate a string
     *
     * @param string $var      The variable
     * @param string $label    The label of variable
     * @param int    $min      The minimum string length
     * @param int    $max      The maximum string length
     * @param bool   $required
     */
    
private function validateString($var$label$min 0$max 0$required false)
    {
        if (
$required == false && mb_strlen($var'utf-8') == 0) {
            return 
true;
        }

        if (isset(
$var)) {
            if (
mb_strlen($var'utf-8') < $min) {
                
$this->addError($label ' (Не менее ' $min ' симв.)');
            } elseif (
mb_strlen($var'utf-8') > $max) {
                
$this->addError($label ' (Не более ' $max ' симв.)');
            }
        }
    }

    
/**
     * Checks whether numeric input has a minimum value
     *
     * @param  float|int
     * @param  string
     * @return bool
     */
    
private function validateMin($var$label)
    {
        if (
is_array($var) && count($var) == && $var[0] <= $var[1]) {
            return 
true;
        } else {
            
$this->addError($label);
        }
    }

    
/**
     * Checks whether numeric input has a maximum value
     *
     * @param  float|int
     * @param  string
     * @return bool
     */
    
private function validateMax($var$label)
    {
        if (
is_array($var) && count($var) == && $var[0] >= $var[1]) {
            return 
true;
        } else {
            
$this->addError($label);
        }
    }

    
/**
     * validate an number
     *
     * @param string $var      The variable
     * @param string $label    The label of variable
     * @param int    $min      The minimum number range
     * @param int    $max      The maximum number range
     * @param bool   $required
     *
     */
    
private function validateNumeric($var$label$min 0$max 0$required false)
    {
        if (
$required == false && mb_strlen($var'utf-8') == 0) {
            return 
true;
        }

        if (
filter_var($varFILTER_VALIDATE_INT, array('options' => array('min_range' => $min'max_range' => $max))) === false) {
            
$this->addError($label);
        }
    }

    
/**
     * @validate a equality
     *
     * @param array  $var   List of variables
     * @param string $label The label of variable
     */
    
private function validateEqual($var$label)
    {
        if (
is_array($var) && count($var) == && $var[0] === $var[1]) {
            return 
true;
        } else {
            
$this->addError($label);
        }
    }

    
/**
     * @validate the inequality
     *
     * @param array  $var   List of variables
     * @param string $label The label of variable
     */
    
private function validateNotEqual($var$label)
    {
        if (
is_array($var) && count($var) == && $var[0] !== $var[1]) {
            return 
true;
        } else {
            
$this->addError($label);
        }
    }

    
/**
     * @validate is empty
     *
     * @param string $var   The variable
     * @param string $label The label of variable
     */
    
private function validateEmpty($var$label)
    {
        if (! empty(
$var)) {
            
$this->addError($label);
        }
    }

    
/**
     * validate is not empty
     *
     * @param string $var   The variable
     * @param string $label The label of variable
     */
    
private function validateNotEmpty($var$label)
    {
        if (empty(
$var)) {
            
$this->addError($label);
        }
    }

    
/**
     * validate is InArray
     *
     * @param array  $var   List of variables
     * @param string $label The label of variable
     */
    
private function validateIn($var$label)
    {
        if (
is_array($var) && count($var) == && in_array($var[0], $var[1], true)) {
            return 
true;
        } else {
            
$this->addError($label);
        }
    }

    
/**
     * @validate on a regular expression
     *
     * @param string $var      The variable
     * @param string $label    The label of variable
     * @param bool   $required
     */
    
private function validateRegex($var$label$required false)
    {
        if (
is_array($var) && count($var) == && $required == false && mb_strlen($var[0], 'utf-8') == 0) {
            return 
true;
        }

        if (! 
preg_match($var[1], $var[0])) {
            
$this->addError($label);
        }
    }

    
/**
     * @validate a floating point number
     *
     * @param $var             The variable
     * @param string $label    The label of variable
     * @param bool   $required
     */

    
private function validateFloat($var$label$required false)
    {
        if (
$required == false && mb_strlen($var'utf-8') == 0) {
            return 
true;
        }

        if (
filter_var($varFILTER_VALIDATE_FLOAT) === false) {
            
$this->addError($label);
        }
    }

    
/**
     * @validate a url
     *
     * @param string $var      The variable
     * @param string $label    The label of variable
     * @param bool   $required
     */
    
private function validateUrl($var$label$required false)
    {
        if (
$required == false && mb_strlen($var'utf-8') == 0) {
            return 
true;
        }

        if (!
preg_match('#^http://([а-яa-z0-9_-.])+(.([а-яa-z0-9/])+)+$#u'$var)) {
            
$this->addError($label);
        }
    }

    
/**
     * @validate a email address
     *
     * @param string $var      The variable
     * @param string $label    The label of variable
     * @param bool   $required
     */
    
private function validateEmail($var$label$required false)
    {
        if (
$required == false && mb_strlen($var'utf-8') == 0) {
            return 
true;
        }

        if (! 
preg_match('#^([a-z0-9_-.])+@([a-z0-9_-.])+(.([a-z0-9])+)+$#'$var)) {
            
$this->addError($label);
        }
    }

    
/**
     * @validate a boolean
     *
     * @param string $var      The variable
     * @param string $label    The label of variable
     * @param bool   $required
     */
    
private function validateBool($var$label)
    {
        if (
filter_var($varFILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE) === false) {
            
$this->addError($label);
        }
    }

    
/**
     * @validate custom
     *
     * @param string $condition The condition
     * @param string $label     The label of variable
     */
    
private function validateCustom($condition$label)
    {
        if (! 
$condition) {
            
$this->addError($label);
        }
    }
}
Онлайн: 1
Реклама