3)){ return true; }else{ return $error_message; } } //validation for minimum value function validate_min($value){ $error_message = VAL_MIN; if(strlen($value[0]) < $value[1]){ return sprintf($error_message,$value[1]); }else{ return true; } } //validation for maximum value function validate_max($value){ $error_message = VAL_MAX; if(strlen($value[0]) > $value[1]){ return sprintf($error_message,$value[1]); }else{ return true; } } //validation for range value function validate_range($value){ $error_message = VAL_RANGE; //$value[0] is the entered value to be compared //$value[1] contains the value range. eg '2-10' $exp_array = explode('-',$value[1]); $min = $exp_array[0]; $max = $exp_array[1]; if(!((strlen($value[0]) >= $min) && (strlen($value[0]) <= $max))){ return sprintf($error_message,'%s',$min,$max); }else{ return true; } } //validation to check email address format function validate_email($value) { $error_message = VAL_EMAIL; if(!empty($value[0])){ $regex = '/^[A-z0-9][\w.-]*@[A-z0-9][\w\-\.]*\.[A-z0-9]{2,6}$/'; $result = preg_match($regex, $value[0]); if(empty($result)){ return sprintf($error_message,'%s',$value[0]); }else{ return true; } }else{ return true; } } //validation to check URL format function validate_website($value) { $error_message = VAL_WEBSITE; $value[0] = $value[0].'/'; if(!empty($value[0]) && ($value[0] != '/')){ $regex = '/^https?:\/\/([a-z0-9]([-a-z0-9]*[a-z0-9])?\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw])(\/)(.*)$/i'; $result = preg_match($regex, $value[0]); if(empty($result)){ return sprintf($error_message,'%s',$value[0]); }else{ return true; } }else{ return true; } } //validation to allow only a-z 0-9 and underscores function validate_username($value){ $error_message = VAL_USERNAME; if(!preg_match("/^[a-z0-9][\w]*$/i",$value[0])){ return sprintf($error_message,'%s',$value[0]); }else{ return true; } } //validation to check two variable equality. usefull for checking password function validate_equal($value){ $error_message = VAL_EQUAL; if($value[0] != $value[2][$value[1]]){ return $error_message; }else{ return true; } } //validate date format //currently only support this format: mm/dd/yyyy or mm-dd-yyyy, yyyy/mm/dd or yyyy-mm-dd function validate_date($value) { $error_message = VAL_DATE; if(!empty($value[0])){ if($value[1] == 'yyyy/mm/dd'){ $regex = "/^([1-9][0-9])\d\d[-\/](0?[1-9]|1[012])[-\/](0?[1-9]|[12][0-9]|3[01])$/"; }elseif($value[1] == 'mm/dd/yyyy'){ $regex = "/^(0[1-9]|1[012])[-\/](0[1-9]|[12][0-9]|3[01])[-\/](19|20)\d\d$/"; } $result = preg_match($regex, $value[0]); } if(empty($result)){ return sprintf($error_message,'%s',$value[1]); }else{ return true; } } //validation to check valid time format function validate_time($value){ $error_message = VAL_TIME; $timestamp = strtotime($value[0]); if($timestamp == -1 || $timestamp === false){ return $error_message; }else{ return true; } } //validation for required file function validate_required_file($value){ $error_message = VAL_REQUIRED_FILE; $element_file = $value[0]; if($_FILES[$element_file]['size'] > 0){ return true; }else{ return $error_message; } } //validation for file upload filetype function validate_filetype($value){ $error_message = VAL_FILETYPE; $value = $value[0]; $ext = pathinfo(strtolower($_FILES[$value]['name']), PATHINFO_EXTENSION); if(defined('UPLOAD_FILETYPE_ALLOW') && (UPLOAD_FILETYPE_ALLOW != '')){ //only allow these filetypes $allowed_filetypes = explode(';',strtolower(UPLOAD_FILETYPE_ALLOW)); if(!in_array($ext,$allowed_filetypes)){ return $error_message; } }elseif(defined('UPLOAD_FILETYPE_DENY') && (UPLOAD_FILETYPE_DENY != '')){ //disallow these filetypes $blacklisted_filetypes = explode(';',strtolower(UPLOAD_FILETYPE_DENY)); if(in_array($ext,$blacklisted_filetypes)){ return $error_message; } } return true; } /********************************************************* * This is main validation function * This function will call sub function, called validate_xx * Each sub function is specific for one rule * * Syntax: $rules[field_name][validation_type] = value * validation_type: required,integer,float,min,max,range,email,username,equal,date * Example rules: * * $rules['author_id']['required'] = true; //author_id is required * $rules['author_id']['integer'] = true; //author_id must be an integer * $rules['author_id']['range'] = '2-10'; //author_id length must be between 2 - 10 characters * **********************************************************/ function validate_rules($input,$rules){ //traverse for each input, check for rules to be applied foreach ($input as $key=>$value){ $current_rules = @$rules[$key]; $error_message = array(); if(!empty($current_rules)){ //an input can be validated by many rules, check that here foreach ($current_rules as $key2=>$value2){ $argument_array = array($value,$value2,$input); $result = call_user_func('validate_'.$key2,$argument_array); if($result !== true){ //if we got error message, break the loop $error_message = $result; break; } } } if(count($error_message) > 0){ $total_error_message[$key] = $error_message; } } if(@is_array($total_error_message)){ return $total_error_message; }else{ return true; } } //similar as function above, but this is specific for validating form inputs, with only one error message per input function validate_element($input,$rules){ //traverse for each input, check for rules to be applied foreach ($input as $key=>$value){ $current_rules = @$rules[$key]; $error_message = array(); if(!empty($current_rules)){ //an input can be validated by many rules, check that here foreach ($current_rules as $key2=>$value2){ $argument_array = array($value,$value2,$input); $result = call_user_func('validate_'.$key2,$argument_array); if($result !== true){ //if we got error message, break the loop $error_message = $result; break; } } } if(count($error_message) > 0){ $last_error_message = $error_message; break; } } if(!empty($last_error_message)){ return $last_error_message; }else{ return true; } } ?>