Решил написать небольшой класс, который этим и будет заниматься. (Не особо люблю готовые решения. jQuery исключение :) )
Для начало надо было решить, как все это будет работать...
Первое что пришло на ум это передавать массив с ключами ТИП ВАЛИДАЦИИ и ЗНАЧЕНИЕ для валидации
Н-р:
array(
'valid' => ШАБЛОНЫ
'value' => ЗНАЧЕНИЕ
)
Теперь осталось разобраться с передачей инфы о валидации... ну тут просто, как и везде что-то типа 'maxlen[35]|email|null'...
[1] => Array
(
[value] => insert_em@fefef
[valid] => email
)
[2] => Array
(
[value] => ins
[valid] => minlen[5]|maxlen[25]
)
Теперь сам класс
/**
* Класс валидации
*
**/
/*
Ошибки:
1 => Превышена максимальная длинна
2 => Меньше минимальной длины
3 => Не является мылом
4 => Не соответствует указанному шаблону
5 => Не содержит целое число
6 => Не содержит число
7 => Не заполнено
8 => Только латиница
*/
class validator
{
function valid(array $array)
{
// Массив ли был передан?
if(!is_array($array))
{
trigger_error('In function validaror::valid() parametr is not array.'.errorFileLine(debug_backtrace()),E_USER_WARNING);
return false;
};
//Массив ошибочеГ
$error = array();
//Просматриваем элементы
foreach($array as $key => $info)
if(!empty($info['valid']))
{
// Получили массив прохожения валидации
$valid_array = array_diff(explode("|",$info['valid']),array(''));
// Делаем проверку валидности
foreach($valid_array as $value)
{
// Необходимо если есть какое-то соответвсвие н-р: maxlen[25]
$match = '';
// Сморим есть ли соответствие
if(preg_match("#\[.+\]#",$value,$match)) $match = $match[0];
// Выделяем метод
$valid_method = str_replace($match,'',$value);
// Выделяем соответствие
$match = preg_replace("#^\[|\]$#",'',$match);
// Смотрим, есть ли такой метод валидации
if(method_exists($this,$valid_method))
{
// Если есть, то вызываем метод, передаем ему параметры
$error[$key] = $this->$valid_method($info['value'],$match);
// Если была ошибка выйдем из валидации для этого значения
if($error[$key]) break;
}
}
}
return $error;
}
// Максимальная длинна
function maxlen($value,$size)
{
if(strlen($value)>((int)$size)) return 1;
return false;
}
// Минимальная длинна
function minlen($value,$size)
{
if(strlen($value)<((int)$size)) return 2;
return false;
}
// корректность мыла
function email($value)
{
if(preg_match("#[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+#",$value)) return false;
return 3;
}
// корректность шаблона
function regular($value,$pattern)
{
if(preg_match($pattern,$value)) return false;
return 4;
}
// Только целые числа
function onlyint($value)
{
if(preg_match("#^[0-9]*$#",$value)) return false;
return 5;
}
// Только числа
function onlynum($value)
{
if(preg_match("#^\d+(\.\d*)?$#",$value)) return false;
return 6;
}
// Заполненно ли?
function null($value)
{
if(strlen($value)) return false;
return 7;
}
// Только латиница
function onlylatin($value)
{
if(preg_match('#^[A-Za-z]*$#',$value)) return false;
return 8;
}
}
Как видим, получилось многа которые функций, которые портят всю красоту...
Вопрос. Как переделать, чтобы было этичнее?
Спустя 4 минуты, 48 секунд (1.07.2011 - 22:32) Dezigo написал(а):
Класс который несодержит свойства - это не класс. Это в твоём случаее куча функций.
Не проще тебе сделать файл с функциями для обработки?
И второе - возврощай true или false.
Не проще тебе сделать файл с функциями для обработки?
И второе - возврощай true или false.
Спустя 1 минута, 56 секунд (1.07.2011 - 22:33) Mirexzpalich написал(а):
Dezigo
это только часть класса.... которая меня не очень устраивает....
это только часть класса.... которая меня не очень устраивает....
Спустя 51 секунда (1.07.2011 - 22:34) Mirexzpalich написал(а):
Цитата |
Не проще тебе сделать файл с функциями для обработки? |
Поподробнее пожалуйста
Спустя 3 минуты, 44 секунды (1.07.2011 - 22:38) Dezigo написал(а):
Ну смотри в проекте есть файл , который ты подключаешь и он имеет функции для обработки, который ты используешь и проверяешь - правельно или не правельно.
При этом тебе не надо создавaть объект.
То что ты возврощаешь 1,2 ,3,4,5 как ты потом это будешь использовать?
Функция is_array она же тебе не возврощает например return 5.? И что с этим делать?
При этом тебе не надо создавaть объект.
То что ты возврощаешь 1,2 ,3,4,5 как ты потом это будешь использовать?
Функция is_array она же тебе не возврощает например return 5.? И что с этим делать?
Спустя 2 минуты, 27 секунд (1.07.2011 - 22:40) Winston написал(а):
Цитата (Mirexzpalich @ 1.07.2011 - 22:34) |
Поподробнее пожалуйста |
Он имеет ввиду, чтобы убрал
class validator
{}
и оставил только ф-и

Спустя 4 минуты, 38 секунд (1.07.2011 - 22:45) Dezigo написал(а):
Цитата (PHPprogramer @ 1.07.2011 - 19:40) | ||
Он имеет ввиду, чтобы убрал class validator {} и оставил только ф-и ![]() |
Правильно.
При этом фунции
is_numeric, is_array и тд. Не нужно же создавать объект что бы сними работать .
Спустя 44 секунды (1.07.2011 - 22:46) Mirexzpalich написал(а):
Dezigo
PHPprogramer
Понял о чем вы... Время вечернее, голова тупит. Можно и так. Но тут представлена только часть класса... Там и свойства есть и конструкттор и еще пара вкусностей.... =)
Dezigo
Просто у меня может быть не ограниченное количество полей и всех их сразу надо обработать проверить.... Да
Только что пришла одна идейка... как наваяю - отпишу
PHPprogramer
Понял о чем вы... Время вечернее, голова тупит. Можно и так. Но тут представлена только часть класса... Там и свойства есть и конструкттор и еще пара вкусностей.... =)
Dezigo
Просто у меня может быть не ограниченное количество полей и всех их сразу надо обработать проверить.... Да
Только что пришла одна идейка... как наваяю - отпишу

Спустя 21 минута, 48 секунд (1.07.2011 - 23:08) Invis1ble написал(а):
Mirexzpalich
Я месяца 4 назад баловался, написал небольшой валидатор, но он завязан на всей системе, сырой и я им в реальных проектах еще не пользовался
Собственно, получился мини-фреймворк.
Я месяца 4 назад баловался, написал небольшой валидатор, но он завязан на всей системе, сырой и я им в реальных проектах еще не пользовался

Собственно, получился мини-фреймворк.
Спустя 13 минут, 17 секунд (1.07.2011 - 23:21) Mirexzpalich написал(а):
Invis1ble
Можешь показать, что у тебя за валидатор вышел?
Можешь показать, что у тебя за валидатор вышел?
Спустя 3 минуты, 42 секунды (1.07.2011 - 23:25) Invis1ble написал(а):
Mirexzpalich
Могу
Но рассматривать надо в контексте всей системы, поэтому прикрепляю архив.
Сам валидатор - libs/core/lfValidator.class.php
Громко не смеяться, делалось все за пару дней for fun
Могу

Сам валидатор - libs/core/lfValidator.class.php
Громко не смеяться, делалось все за пару дней for fun

Спустя 44 минуты, 16 секунд (2.07.2011 - 00:09) Mirexzpalich написал(а):
Invis1ble
Пасиба... покурю на ночь =)
Вот как я переделал свое решение
Все эти валидации - сплошная регулярка по сути... Но есть исключения... их мона добвить и обработать отдельно.
Пасиба... покурю на ночь =)
Вот как я переделал свое решение
Все эти валидации - сплошная регулярка по сути... Но есть исключения... их мона добвить и обработать отдельно.
class validator
{
var $pattern = array();
function validator()
{
$this->pattern = array(
'maxlen' => array(
'pattern' => '.{0,%%0%%}',
'error' => 1
),
'length_between' => array(
'pattern' => '.{%%0%%,%%1%%}',
'error' => 4
),
'minlen' => array(
'pattern' => '.{%%0%%,}',
'error' => 2
),
'email' => array(
'pattern' => "[a-zA-Z0-9_]+@[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+",
'error' => 3
)
);
}
function valid(array $array)
{
// Массив ли был передан?
if(!is_array($array))
{
trigger_error('In function validaror::valid() parametr is not array.'.errorFileLine(debug_backtrace()),E_USER_WARNING);
return false;
};
//Массив ошибочег
$error = array();
//Просматриваем элементы
foreach($array as $key => $info)
if(!empty($info['valid']))
{
// Получили массив прохожения валидации
$valid_array = array_diff(explode("|",$info['valid']),array(''));
// Делаем проверку валидности
foreach($valid_array as $value)
{
// Необходимо если есть какое-то соответвсвие н-р: maxlen[25]
$match = '';
// Сморим есть ли соответствие
preg_match_all("#\[([^\]]+)\]#",$value,$match);
// Выделяем метод валидации
$pattern = preg_replace("#\[.+\]#", '', $value);
// Смотрим, есть ли такой способ валидации
if(array_key_exists($pattern,$this->pattern))
{
//Собирем массив для подмены
$match[0] = explode("|",'%%'.implode('%%|%%',array_keys($match[1])).'%%');
// Если есть, то проверяем метод, передаем ему параметры
$exec = "#^".str_replace($match[0],$match[1],$this->pattern[$pattern]['pattern'])."$#";
// Выполним
if(!preg_match($exec,$info['value'])) $error[$key] = $this->pattern[$pattern]['error'];
// Если была ошибка выйдем из валидации для этого значения
if(!empty($error[$key])) break;
}
}
}
return $error;
}
}
Спустя 7 минут, 28 секунд (2.07.2011 - 00:16) Invis1ble написал(а):
Да, там кстати лишняя директория nbproject, забыл ее удалить перед сжатием
Спустя 22 минуты, 41 секунда (2.07.2011 - 00:39) Mirexzpalich написал(а):
Invis1ble
для пары дней не плохой результат
Но у тебя как и в моем первом варианте - слишком много однотипных действий... не люблю это...
для пары дней не плохой результат

_____________
Дорогу осилит идущий...