Berry Framework

Фреймворк, в который собраны функции использованные в различных проектах. В том числе: ORM, шаблонизатор и ряд других полезных в хозяйстве вещей.

Скачать
trunk-версия (650 КБ)
Наверх

Check

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

Методы

check::is_valid()

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

Пример

$array = array(
    'str' => 'Я строка, я не IP',
    'int' => 22,
    'assoc' => array(
        'float1' => 14.5,
        'float2' => 7.2
    )
);
$rules = array(
    // Является ли поле числом от 1 до 20, если не указан оператор or, считается за and
    'int' => array('int(1, 10) or int(11, 20)', 'Должно быть число от 1 до 20'),

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

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

    // _Не_ является IP
    'str' => array('!ip', 'Это IP, а не должно им быть')
);

// false
var_dump(check::is_valid($rules, $array));

// или

try {
    if (!check::is_valid($rules, $array))
        throw new Check_Except($rules, 'array');
} catch (Check_Except $e){
    echo $e;
}
array[int] Должно быть число от 1 до 20
array[assoc][float2] Число с плавающей точкой меньше пяти дайте

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

$rules = array(
    'int' => array('int(1, 20) in(18, 19, 20)', '{"int": "Текст для int", "in": "Текст для in"}')
);

Методы с префиксом is_ можно использовать сами по себе.

// true
var_dump(check::is_int(20, array(15, 25)))

Обратите внимание: в правилах префикс is_ можно игнорировать.

check::is_int()

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

Пример

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

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

check::is_float()

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

check::is_number()

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

check::is_numeric()

Синоним предыдущего метода.

check::is_datetime()

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

check::is_date()

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

check::is_time()

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

check::is_string()

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

check::is_mail()

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

check::is_url()

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

check::is_aid()

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

Пример

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

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

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

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

check::is_ip()

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

check::is_unique()

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

Пример

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

// или

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

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

check::is_phone()

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

check::is_isbn()

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

check::is_barcode()

Проверяет валидность штрихкода форматов: EAN-8, UCC-12 (UCC-A), EAN-13 и EAN-14 (ITF-14).

check::checker()

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

Пример

function testit($value, $params = array()){
    // $value - Some text
    // $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 - Some text
    // $params - array('param1', 'param2')

    return true;
}

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

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

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

check::same_as()

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

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

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

check::compare()

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

Пример

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

check::in()

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

check::mime()

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

check::ext()

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

check::size()

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

check::width()

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

check::height()

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