Класс Check

Класс-помощьник для валидации данных.

Методы

check::is_valid()

Проверяет проходят ли данные правила.

Пример

$array = array(
    'str' => 'Текст',
    'int' => 22,
    'assoc' => array(
        'float1' => 14.5,
        'float2' => 7.0
    )
);
$rules = array(
    // Является ли поле числом от 1 до 20
    'int' => array('int(1, 20)', 'Должно быть число от 1 до 20'),

    // Является ли числом с плавающей точкой
    'assoc.float1' => array('float', 'Число с плавающей точкой дайте'),

    // Является ли числом с плавающей точкой больше 5
    'assoc.float2' => array('float(5)', 'Число с плавающей точкой больше пяти дайте')
);

print_r(check::is_valid($rules, $array));

/* Array
(
    [0] => Array
        (
            [0] => int(1, 20)
            [1] => Должно быть число от 1 до 20
        )

) */

// или

// false
var_dump(check::is_valid('int', 'int(1, 20)', $array));

Можно указывать и несколько правил.

// false
var_dump(check::is_valid('int', 'int(1, 20) float(0, 5)', $array));

Для шаблонов правил доступны отрицания.

// true
var_dump(check::is_valid('int', '!int(1, 20)', $array));

Чтобы конкретизировать невалидность поля при нескольких правилах текст можно писать как JavaScript хэш (ассоциативный массив).

$rules = array(
    'int' => array('int(1, 20) in(18, 19, 20)', '{"int": "Этот текст относится к ошибки с int", "in": "А этот к in"}')
);

print_r(check::is_valid($rules, $array));

/* Array
(
    [0] => Array
        (
            [0] => int(1, 20)
            [1] => Этот текст относится к ошибки с int
        )

) */

check::is_valid_get()

Проверяет валиден ли $_GET. В случае неудачи вернёт пустой массив.

Пример

check::is_valid('int', 'int(1, 20)', $_GET);

// array()
var_dump(check::is_valid_get());

check::is_valid_post()

То же самое что и check::is_valid_get() только для массива $_POST.

check::is_valid_files()

То же самое что и check::is_valid_get() только для массива $_FILES.

check::int()

Является ли простым целым числом.

Пример

// false
var_dump(check::is_valid('int', 'int(1, 20)', $array));

// false
var_dump(check::int($array['int'], array(1, 20)));

check::float()

Является ли числом с плавающей точкой.

check::number()

Является ли числом.

check::datetime()

Является ли датой в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС.

check::date()

Является ли датой в формате ГГГГ-ММ-ДД.

check::time()

Является ли временем в формате ЧЧ:ММ:СС.

check::string()

Не является ли строка пустой.

check::mail()

Является ли мейлом.

check::url()

Является ли УРЛом.

check::aid()

Является ли альтернативным идентификатором.

Пример

// true
var_dump(check::aid('l_ex-a'));

// false
var_dump(check::aid('-lexa'));

// false
var_dump(check::aid('lexa_'));

// false
var_dump(check::aid('Лёха'));

check::ip()

Является ли IP.

check::checker()

Вызывает внешнюю функцию или метод для проверки.

Пример

function testit($value, $params = array()){
    // $value - World
    // $params - array('param1', 'param2')

    return true;
}

// true
var_dump(check::is_valid('Some text', 'checker(testit, param1, param2)'));

Чтобы не вызывать внешнюю функцию, а сделать шаблон для правил "родным", следует создать функцию с префиксом check.

function check_testit($value, $params = array()){
    // $value - World
    // $params - array('param1', 'param2')

    return true;
}

// true
var_dump(check::is_valid('Some text', 'testit(param1, param2)'));

Помимо $value и $params функции-валидаторы получают и другие параметры, но они не всегда нужны. Если хотите увидеть все входящие данные используйте func_get_args().

check::compare()

Сравнивает данные.

Пример

// true
var_dump(check::is_valid('5.2.4', 'compare(>=, 4.2.8)'));

check::unique()

Не существует ли в таблице поле с таим значением.

Пример

// true
var_dump(check::is_valid('lexa', 'unique(table.field)'));

// или

// true
var_dump(check::is_valid('lexa', 'unique(table.field, and where)'));

Первый параметр пишется через точку! таблица.поле или база.таблица.поле

check::in()

Является ли значением из списка.

check::phone()

Является ли телефонным номером. Этот метод ничего магического не делает, он просто вырезает всё, кроме цифр и сравнивает длинну со значением. По умолчанию значения 7, 10 и 11. Формируйте телефонные номера методом int::phone().

check::isbn()

Проверяет валидность ISBN.

check::same_as()

Сравнивает значение текущего поля с полем из параметра.

$array = array(
    'password' => 'myPass',
    'rep_password' => 'mypass'
);

// false
var_dump(check::is_valid('rep_password', 'same_as(password)', $array));

Обратите внимание: этот метод метод и методы ниже нельзя использовать отдельно от валидатора!

check::mime()

Проверяет MIME-тип файла. В параметрах можно использовать "жадность": image/* - все типы группы image.

check::ext()

Проверяет расширение файла.

check::size()

Проверяет размер файла.

check::width()

Проверяет ширину изображения.

check::height()

Проверяет высоту картинки.