<?

/*

php validator class 
by cadmagician
info@dev2.hu
free, de tőkét elfogadok.
ha van kiegészítésed, küldd el nekem, bővítsük

*/


class validator{
   
    var 
$valid true;
    var 
$message = array();

    function 
item($value,$valid,$message){
      
$value trim($value);
      
$empty $value == "" true false;
      foreach(
$valid as $dik=> $validation){
        switch(
true){
        case 
$validation == "required" :
            if(!(
strlen($value)>0) && ($value!="-1") ){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;
            }
            break;
        case 
$validation ==  "url" :
            if ( !
$empty && (!preg_match("/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i",$value))){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;              
            }
            break;
        case 
$validation ==  "username" :
            if ( !
$empty && (!preg_match("/^([a-zA-Z0-9][a-zA-Z0-9-]{2,30}[a-zA-Z0-9])$/",$value))){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;
            } 
            break;
        case 
$validation ==  "username2" :
            if ( !
$empty && (!preg_match("/^([A-Za-z0-9éáűúőöüóÉÁŰÚŐÓÜÖíÍä\-+_!() |])+$/",$value))){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;
            } 
            break;                         
        case 
$validation ==  "alpha" :
          
            if ( !
$empty && !preg_match("/^([A-Za-z0-9éáűúőöüóÉÁŰÚŐÓÜÖíÍä\-+_!() |])+$/",$value)){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;
            }
            break;
        case 
$validation ==  "password" :
            if ( !
$empty && !preg_match("/^(.{5,})$/",$value)){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;
            }
            break;            
        case 
$validation ==  "date" :
            if ( !
$empty && !preg_match("/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$/",$value)){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;              
            }
            break;
        case 
$validation ==  "datetime" :
            if ( !
$empty && !preg_match("/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}(:[0-9]{1,2})?$/",$value)){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;              
            }
            break;                        
        case 
$validation ==  "numbers" :
            if ( !
$empty && !preg_match("/^[0-9]+$/",$value)){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;              
            }
            break;
        case 
$validation ==  "float" :
            if ( !
$empty && !preg_match("/^[+-]?[0-9]+\.?([0-9]+)?$/",$value)){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;              
            }
            break;            
        case 
$validation ==  "currency" :
            if ( !
$empty && !preg_match("/^([0-9])+ ?(huf|eur|ft)?$/i",$value)){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;              
            }
            break;            
        case 
$validation ==  "email" :
            if ( !
$empty && !preg_match("/^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$/",$value)){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;              
            }
        case 
substr($validation,0,6) ==  "regexp" :
            
$regexp substr($validation,6); 
            if ( 
$empty && !preg_match("/$regexp/",$value)){
              
$this->valid false;
              
$this->message[]= $message[$dik];
              break 
2;              
            }            
            break;
        }
      }    
    }
    
    function 
valid_equal($values$message){
   
      if (!(
count(array_unique((array)$values))==1) || ($values[0]=="") ){
          
$this->valid false;
          
$this->message[]= $message;
      }
    }

    function 
one_required($values$message){
      if (!(
count(array_unique((array)$values))>0)){
          
$this->valid false;
          
$this->message[]= $message;
      }
    }
    
    function 
validate($rules$items){
      
$this->valid true;
      foreach (
$rules as $key => $field){ 
        if (
count($rules[$key])>0){
          
$this->item($items[$key],$field[0],$field[1]);      
        }
      }
    }    
    
    function 
set_valid($valid$message){
      
$this->valid $valid;
      
$this->message[]= $message;
    }
    
    function 
valid(){
      return 
$this->valid;    
    }
    
    function 
message(){
      return 
"<p class=\"validation-advice\">".implode("<br />",array_unique($this->message))."</p>";
    }
    
    function 
result(){
      
$result["result"] = $this->valid;
      
$result["message"] = "<p class=\"validation-advice errors\">".implode("<br />",array_unique($this->message))."</p>";  
      return 
$result;    
    }   
}
?>