KumbiaPHP  beta2
Framework PHP
 Todo Estructuras de Datos Namespaces Archivos Funciones Variables Páginas
validate.php
Ir a la documentación de este archivo.
1 <?php
22 class Validate
23 {
28  /*
29  * El valor deber ser solo letras y números
30  */
31  const IS_ALPHANUM = '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/mu';
32 
38  public static $regex = NULL;
39 
44  protected $obj = null;
45 
50  protected $messages = array();
51 
56  protected $rules = array();
66  protected $is_obj = false;
67 
68  public function __construct($obj, Array $rules){
69  $this->is_obj = is_object($obj);
70  $this->obj = (object)$obj;
71  $this->rules = $rules;
72  }
73 
87  public function exec(){
88  $obj = $this->obj;
90  /*Recorrido por todos los campos*/
91  foreach ($rules as $field => $fRule){
92  $value = isset($obj->$field)?$obj->$field:null;//obtengo el valor del campo
93  /*Regla individual para cada campo*/
94  foreach ($fRule as $ruleName => $param) {
95  /*Evita tener que colocar un null cuando no se pasan parametros*/
96  $ruleName = is_integer($ruleName) && is_string($param)?$param:$ruleName;
97  /*param siempre es un array*/
98  $param = is_array($param)?$param:array();
99  /*Es una validación de modelo*/
100  if($ruleName[0] == '@' and $this->is_obj){
101  $ruleName = ltrim($ruleName, '@');
102  if(!$obj->$ruleName($param)){
103  $this->messages[] = isset($param['error']) ?
104  $param['error']: "El campo '$field' no es válido";
105  }
106 
107  }elseif($ruleName[0] != '@' && !self::$ruleName($value, $param)){
108  $this->messages[] = isset($param['error']) ? $param['error']: "El campo '$field' no es válido";
109  }
110  }
111  }
112  /*Si no hay errores devuelve true*/
113  return empty($this->messages);
114  }
115 
120  public function getMessages(){
121  return $this->messages;
122  }
123 
124  public static function fail($obj, Array $rules){
125  $val = new self($obj, $rules);
126  return $val->exec() ? false:$val->getMessages();
127  }
128 
129 
135  public static function numeric($check){
136  return is_numeric($check);
137  }
138 
145  public static function int($check)
146  {
147  return filter_var($check, FILTER_VALIDATE_INT);
148  }
149 
159  public static function maxlength($value, $param)
160  {
161  $max= isset($param['max'])?$param['max']:0;
162  return !isset($value[$max]);
163  }
164 
173  public static function range($value, $param)
174  {
175  $min = isset($param['min']) ? $param['min'] : 0;
176  $max = isset($param['max']) ? $param['max'] : 10;
177  $int_options = array('options' => array('min_range'=>$min, 'max_range'=>$max));
178  return filter_var($value, FILTER_VALIDATE_INT, $int_options);
179  }
180 
189  public static function selet($value, $param)
190  {
191  $list = isset($param['list']) && is_array($param['list']) ? $param['list'] : array();
192  return in_array($value, $list);
193  }
194 
200  public static function email($mail)
201  {
202  return filter_var($mail, FILTER_VALIDATE_EMAIL);
203  }
204 
211  public static function url($url, $param)
212  {
213  $flag = isset($param['flag'])? $param['flag'] : 0;
214  return filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED | $flag);
215  }
216 
223  public static function ip($ip, $flags = FILTER_FLAG_IPV4)
224  {
225  return filter_var($ip, FILTER_VALIDATE_IP, $flags);
226  }
227 
234  public static function required($check)
235  {
236  return !empty($check) && $check!='0';
237  }
238 
246  public static function alphanum($string)
247  {
248  return self::pattern($string, self::IS_ALPHANUM);
249  }
250 
259  public static function date($value, $format = 'd-m-y')
260  {
261  // busca el separador removiendo los caracteres de formato
262  $separator = str_replace(array('d' , 'm' , 'y'), '', $format);
263  $separator = $separator[0]; // el separador es el primer caracter
264  if ($separator && substr_count($value, $separator) == 2) {
265  switch (str_replace($separator, '', $format)) {
266  case 'dmy':
267  list ($day, $month, $year) = explode($separator, $value);
268  break;
269  case 'mdy':
270  list ($month, $day, $year) = explode($separator, $value);
271  break;
272  case 'ymd':
273  list ($year, $month, $day) = explode($separator, $value);
274  break;
275  default:
276  return false;
277  }
278  if (ctype_digit($month) && ctype_digit($day) && ctype_digit($year)) {
279  return checkdate($month, $day, $year);
280  }
281  }
282  return false;
283  }
284 
292  public static function pattern($check, $param)
293  {
294  $regex = isset($param['regex'])? $param['regex'] : '/.*/';
295  return filter_var($check, FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => $regex)));
296  }
297 
305  public static function decimal($value, $param)
306  {
307  $decimal = isset($param['decimal'])? $param['decimal'] : ',';
308  return filter_var($value, FILTER_VALIDATE_FLOAT, array('options' => array('decimal' => $decimal)));
309  }
310 }