<?php
 
/**
 
* Base validation class
 
*
 
* @author    Sven Wagener <[email protected]>
 
* @copyright Sven Wagener
 
* @include      Funktion:_include_
 
*/
 
class validate{
 
    var $allow_letters;
 
    var $allow_letters_de;
 
    var $allow_nums;
 
    var $allow_punctations;
 
    var $allow_specialchars;
 
    var $allow_sql;
 
    var $allow_whitespaces;
 
    
 
    var $min_length;
 
    var $max_length;
 
    
 
    var $punctations="\.\,\:\;\?\!\(\)\"\'"; // Allowed punctation marks
 
    var $special_chars="-\+\*\~\#\^\$\§\%\€"; // Allowed special chars
 
    var $format_chars=" 0123456789-LN.,:;@/\\=_()"; // Chars which are allowed in format pattern
 
    
 
    var $format;
 
    var $is_format=false;
 
    var $format_regex;
 
    var $regex;
 
    
 
    var $permitted_chars="^°´`*~'#";
 
    
 
    var $permitted_words=array();
 
    
 
    var $country_chars=array(
 
    'de'=>'a-zA-ZäÄöÖüÜß',
 
    'fr'=>'a-zA-ZáàÁÀéèÉÈíì'
 
    );
 
    
 
    var $sql_alerts=array(
 
    'select',
 
    'delete',
 
    'update',
 
    'insert',
 
    'into',
 
    'drop',
 
    'from',
 
    'where'
 
    );
 
    
 
    var $sql_statements=array(
 
    'select from',
 
    'delete from',
 
    'update set',
 
    'insert into',
 
    'drop table'
 
    );
 
    
 
    
 
    /**
 
    * The constructor of the validation class
 
    * @desc The constructor of the validation class
 
    */
 
    function validate(){
 
        $this->letters_off();
 
        $this->nums_off();
 
        $this->punctations_off();
 
        $this->specialchars_off();
 
        $this->sql_off();
 
        $this->whitespaces_off();
 
    }
 
    
 
    /**
 
    * Allow letters
 
    * @desc Use function to allow Letters in string
 
    */
 
    function letters_on(){
 
        $this->allow_letters=true;
 
    }
 
    
 
    /**
 
    * Disallow letters
 
    * @desc Use function to disallow Letters in string
 
    */
 
    function letters_off(){
 
        $this->allow_letters=false;
 
    }
 
    
 
    /**
 
    * Allow letters
 
    * @desc Use function to allow Letters in string
 
    */
 
    function letters_de_on(){
 
        $this->allow_letters_de=true;
 
    }
 
    
 
    /**
 
    * Disallow letters
 
    * @desc Use function to disallow Letters in string
 
    */
 
    function letters_de_off(){
 
        $this->allow_letters_de=false;
 
    }
 
    
 
    /**
 
    * Allow numbers
 
    * @desc Use function to allow Letters in string
 
    */
 
    function nums_on(){
 
        $this->allow_nums=true;
 
    }
 
    
 
    /**
 
    * Disallow numbers
 
    * @desc Use function to disallow Letters in string
 
    */
 
    function nums_off(){
 
        $this->allow_nums=false;
 
    }
 
    
 
    /**
 
    * Allow punctation marks
 
    * @desc Use function to allow punctation marks in string
 
    */
 
    function punctations_on(){
 
        $this->allow_punctations=true;
 
    }
 
    
 
    /**
 
    * Disallow punctation marks
 
    * @desc Use function to disallow punctation marks in string
 
    */
 
    function punctations_off(){
 
        $this->allow_punctations=false;
 
    }
 
    
 
    /**
 
    * Allow special chars
 
    * @desc Use function to allow special chars in string
 
    */
 
    function specialchars_on(){
 
        $this->allow_specialchars=true;
 
    }
 
    
 
    /**
 
    * Disallow special chars
 
    * @desc Use function to disallow special chars in string
 
    */
 
    function specialchars_off(){
 
        $this->allow_specialchars=false;
 
    }
 
    
 
    /**
 
    * Allow sql statements
 
    * @desc Use function to allow sql statements in string
 
    */
 
    function sql_on(){
 
        $this->allow_sql=true;
 
    }
 
    
 
    /**
 
    * Disallow sql statements
 
    * @desc Use function to disallow sql statements in string
 
    */
 
    function sql_off(){
 
        $this->allow_sql=false;
 
    }
 
    
 
    /**
 
    * Allow whitespaces
 
    * @desc Use function to allow whitespaces in string
 
    */    
 
    function whitespaces_on(){
 
        $this->allow_whitespaces=true;
 
    }
 
    
 
    /**
 
    * Disallow whitespaces
 
    * @desc Use function to disallow whitespaces in string
 
    */        
 
    function whitespaces_off(){
 
        $this->allow_whitespaces=false;
 
    }
 
    
 
    /**
 
    * Set length of string
 
    * @param int $min Minimum length of string
 
    * @param int $max Maximum length of string
 
    * @desc Set length of string
 
    */
 
    function length($min=0,$max=""){
 
        $this->min_length=$min;
 
        $this->max_length=$max;
 
    }
 
    
 
    /**
 
    * Setting format for string
 
    * @param string $format
 
    * @return boolean $ok Returns false if formatting string isn't correct
 
    * @desc Setting format for for string. L=Letters N=Numbers E.g. 3-20L means 3 till 20 Letters. 5N means 5 numbers (e.g. german postal code).
 
    */
 
    function format($format){
 
        $this->is_format=true;
 
        $regnum=0;
 
        $counter="";
 
        
 
        // Run each chars of format string
 
        $strlen=strlen($format);
 
        for($i=0;$i<$strlen;$i++){
 
            $char=$format[$i]; // Getting actual char
 
            
 
            switch($char){
 
                // Casing for LETTERS
 
                case 'L':
 
                $type="LETTER";
 
                if($last_type=="" || $last_type=="LETTER" || $last_type=="NUMBER"){
 
                    $this->format_regex[$regnum++]="[a-zA-Z]{1,1}";
 
                }else if($last_type=="COUNTER"){
 
                    if(!$fromtill){
 
                        $this->format_regex[$regnum++]="[a-zA-Z]\{$counter_from,$counter_from}";
 
                    }else{
 
                        $this->format_regex[$regnum++]="[a-zA-Z]\{$counter_from,$counter_till}";
 
                        $fromtill=false;
 
                    }
 
                }
 
                break;
 
                // Casing for NUMBERS
 
                case 'N':
 
                $type="NUMBER";
 
                if($last_type=="" || $last_type=="NUMBER" || $last_type=="LETTER"){
 
                    $this->format_regex[$regnum++]="[0-9]{1,1}";
 
                }else if($last_type=="COUNTER"){
 
                    if(!$fromtill){
 
                        $this->format_regex[$regnum++]="[0-9]\{$counter_from,$counter_from}";
 
                    }else{
 
                        $this->format_regex[$regnum++]="[0-9]\{$counter_from,$counter_till}";
 
                        $fromtill=false;
 
                    }
 
                }
 
                break;
 
                
 
                // Casing for FROMTILL
 
                case '-':
 
                $type="FROMTILL";
 
                if($last_type!="COUNTER"){
 
                    $last_type="";
 
                    $this->format_regex[$regnum++]="[\-]{1,1}";
 
                }/*else{
 
                $this->format_regex[$regnum++]="[\-]\{$counter_from,$counter_till}";
 
                }*/
 
                break;
 
                
 
                
 
                // Otherwise do this
 
                default:
 
                // If char is allowed in formatting string
 
                if($this->is_format_char($char)){
 
                    
 
                    // If char is a number
 
                    if(is_numeric($char)){
 
                        $type="COUNTER";
 
                        if($last_type=="COUNTER"){
 
                            $counter.=$char;
 
                            if(!$fromtill){
 
                                $counter_from=$counter;
 
                            }else{
 
                                $counter_till=$counter;
 
                            }
 
                        }else if($last_type=="FROMTILL"){
 
                            $counter=$char;
 
                            $counter_till=$counter;
 
                            $fromtill=true;
 
                            
 
                        }else{
 
                            $counter=$char;
 
                            $counter_from=$counter;
 
                        }
 
                        
 
                        break;
 
                    }else{
 
                        $type="CHAR";
 
                        if($last_type=="" || $last_type=="NUMBER" || $last_type=="LETTER" || $last_type== "CHAR"){
 
                            $this->format_regex[$regnum++]="[\\$char]{1,1}";
 
                        }else if($last_type=="COUNTER"){
 
                            if(!$fromtill){
 
                                $this->format_regex[$regnum++]="[\\$char]\{$counter_from,$counter_from}";
 
                            }else{
 
                                $this->format_regex[$regnum++]="[\\$char]\{$counter_from,$counter_till}";
 
                                $fromtill=false;
 
                            }
 
                        }
 
                        break;
 
                    }
 
                }else{
 
                    return false;
 
                    break;
 
                }
 
                
 
            }
 
            $last_type=$type;
 
            
 
            
 
        }
 
    }
 
    
 
    /**
 
    * Checks if char is is allowed in formatting string
 
    * @param char $char Char which have to be checked
 
    * @return boolean $ok Returns true if char is allowed, otherwise false
 
    * @desc Checks if char is is allowed in formatting string
 
    */
 
    function is_format_char($char){
 
        if(strlen($char)>1){
 
            return false;
 
        }
 
        // Checking if char is wrong
 
        $char_matched=false;
 
        for($j=0;$j<strlen($this->format_chars);$j++){
 
            $format_char=$this->format_chars[$j];
 
            if($format_char==$char){
 
                $char_matched=true;
 
            }
 
        }
 
        return $char_matched;
 
    }
 
    
 
    /**
 
    * Checks a string by the set rules
 
    * @param char $string String which have to be checked
 
    * @return boolean $ok Returns true if char is allowed, otherwise false
 
    * @desc Checks a string by the set rules
 
    */
 
    function check($string){
 
        
 
        if($this->is_format){
 
            return ereg($this->get_regex(),$string);
 
        }else{
 
            if($this->allow_nums){
 
                $regex.="0-9";
 
            }
 
            if($this->allow_letters){
 
                $regex.="a-zA-Z";
 
            }
 
            if($this->allow_letters_de){
 
                $regex.="äöüÄÖÜß";
 
            }
 
            if($this->allow_punctations){
 
                $regex.=$this->punctations;
 
            }
 
            if($this->allow_specialchars){
 
                $regex.=$this->special_chars;
 
            }
 
            if($this->allow_whitespaces){
 
                $regex.="\ ";
 
            }
 
            $regex.="\r\n";
 
            
 
            $found_sql=false;
 
            if(!$this->allow_sql){
 
                // Searching for SQL statements
 
                $string_array=split("[\ ]",strtolower($string));
 
                $j=0;
 
                // Check ing all words of string
 
                for($i=0;$i<count($string_array);$i++){
 
                    // If word is in sql blacklist
 
                    if(in_array($string_array[$i],$this->sql_alerts)){
 
                        $sql_words[$j++]=$string_array[$i];
 
                        
 
                        // Checking if get words could be an sql statement
 
                        $sql="";
 
                        for($k=0;$k<count($sql_words);$k++){
 
                            if($k==0){
 
                                $sql.=$sql_words[$k];
 
                            }else{
 
                                $sql.=" ".$sql_words[$k];
 
                            }
 
                            if(in_array($sql,$this->sql_statements)){
 
                                $found_sql=true;
 
                                $sql="";
 
                            }
 
                        }
 
                    }
 
                }
 
            }
 
            
 
            if($found_sql){
 
                return false;
 
            }else{
 
                if($this->min_length!="" && $this->max_length!=""){
 
                    $regex="^[$regex]\{".$this->min_length.",".$this->max_length."}$";
 
                }else if($this->min_length!=""){
 
                    $regex="^[$regex]\{".$this->min_length.",}$";
 
                }else if($this->max_length!=""){
 
                    $regex="^[$regex]\{0,".$this->max_length."}$";
 
                }else{
 
                    $regex="^[$regex]*$";
 
                }
 
            }
 
            return ereg($regex,$string);
 
        }
 
    }
 
    
 
    
 
    /**
 
    * Returns the regex pattern string of set rules
 
    * @return string $regex The regex pattern string
 
    * @desc Returns the regex pattern string
 
    */
 
    function get_regex(){
 
        $regex="^";
 
        $numreg=count($this->format_regex);
 
        for($i=0;$i<$numreg;$i++){
 
            $regex.=$this->format_regex[$i];
 
        }
 
        $regex.="$";
 
        return $regex;
 
    }
 
    
 
}
 
?>
 
 |