Thursday, October 9, 2008

php form validator


<?php
/*@Author Anup */
class ValidateFunction
{
  var 
$errorArray= array();
  var 
$errCnt  = 0;

  var 
$errorFor;
function 
VALIDATE_USPHONE($phonenumber,$useareacode=true) 
{ 
if ( 
preg_match("/^[ ]*[(]{0,1}[ ]*[0-9]{3,3}[ ]*[)]{0,1}[-]{0,1}[ ]*[0-9]{3,3}[ ]*[-]{0,1}[ ]*[0-9]{4,4}[ ]*$/",$phonenumber) || (preg_match("/^[ ]*[0-9]{3,3}[ ]*[-]{0,1}[ ]*[0-9]{4,4}[ ]*$/",$phonenumber) && !$useareacode)) return eregi_replace("[^0-9]", "", $phonenumber); 

return 
false; 
}
  
function 
validateCC($cc_num, $type) 
{

    if(
$type == "american") {

    
$denum = "American Express";
    } elseif(
$type == "dinners") {
    
$denum = "Diner's Club";

    } elseif(
$type == "discover") {
    
$denum = "Discover";
    } elseif(
$type == "master") {

    
$denum = "Master Card";
    } elseif(
$type == "visa") {
    
$denum = "Visa";
    }


    if(
$type == "american") {
    
$pattern = "/^([34|37]{2})([0-9]{13})$/";//American Express
    
if (preg_match($pattern,$cc_num)) {

    
$verified = true;
    } else {
    
$verified = false;
    }
    
    
    } elseif(
$type == "dinners") {

    
$pattern = "/^([30|36|38]{2})([0-9]{12})$/";//Diner's Club
    
if (preg_match($pattern,$cc_num)) {
    
$verified = true;

    } else {
    
$verified = false;
    }
    
    
    } elseif(
$type == "discover") {

    
$pattern = "/^([6011]{4})([0-9]{12})$/";//Discover Card
    
if (preg_match($pattern,$cc_num)) {
    
$verified = true;

    } else {
    
$verified = false;
    }
    
    
    } elseif(
$type == "master") {

    
$pattern = "/^([51|52|53|54|55]{2})([0-9]{14})$/";//Mastercard
    
if (preg_match($pattern,$cc_num)) {
    
$verified = true;

    } else {
    
$verified = false;
    }
    
    
    } elseif(
$type == "visa") {

    
$pattern = "/^([4]{1})([0-9]{12,15})$/";//Visa
    
if (preg_match($pattern,$cc_num)) {
    
$verified = true;

    } else {
    
$verified = false;
    }
    
    }
    
    if(
$verified == false) {

    
//Do something here in case the validation fails
    //echo "Credit card invalid. Please make sure that you entered a valid <em>" . $denum . "</em> credit card ";

        
return false;
    } else { 
//if it will pass...do something
    //echo "Your <em>" . $denum . "</em> credit card is valid";

        
return true;
    }


}  
  
    function 
chkUrl($url,$field = "")

    {
    
//eregi("http://.[a-zA-Z0-9_.\.-]",$url)
        
if(eregi("www.[a-zA-Z0-9_.\.-]",$url))
        {
            return 
true;
        }
        else
        {
        echo 
"false";

            return 
false;
        }
    }
//function chkUrl($url,$field = "")

     
    
function myCheckDNSRR($hostName, $recType = '') 

    { 
    
     if(!empty(
$hostName)) { 
      if( 
$recType == '' ) $recType = "MX"; 

      
exec("nslookup -type=$recType $hostName", $result); 
      
// check each line to find the one that starts with the host 

      // name. If it exists then the function succeeded. 
      
foreach ($result as $line) { 

        if(
eregi("^$hostName",$line)) { 
          return 
true; 
        } 
      } 

      
// otherwise there was no mail handler for the domain 
      
return false; 
    }  

    return 
false; 
    }
//function myCheckDNSRR($hostName, $recType = '') 
    
    
function checkMailAddressErr($email)

    {
        
//$exp = "^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";
          //$exp = "^[a-z]+[a-z0-9_-]*(([.]{1})|([a-z0-9_-]*))[a-z0-9_-]+[@]{1}[a-z0-9_-]+[.](([a-z]{2,3})|([a-z]{3}[.]{1}[a-z]{2}))$";
          //$exp = "^[a-z]+[a-z0-9_-]*(([.]{1})|([a-z0-9_-]*))[a-z0-9_-]+[@]{1}[a-z0-9_-]+[.](([a-z]{2,3})|([a-z]{3}[.]{1}[a-z]{2}))$";
        
$exp = "^[a-zA-Z0-9]+[_a-zA-Z0-9-]*(\.[_a-z0-9-]+)*@[a-zöäüÖÄÜ0-9]+(-[a-zöäüÖÄÜ0-9]+)*(\.[a-zöäüÖÄÜ0-9-]+)*(\.[a-z]{2,4})$";
          if(
eregi($exp,$email))

          {
             return 
true;
          }
          else
          {
             return 
false;
          } 
    }
//function checkMailAddressErr($email)
  
function validate($validation,$fieldName,$message="",$chkBase=0,$notReq=0)

  {
         
//echo $validation."&nbsp;&nbsp;";
       
switch($validation)        
       {
           case 
"cc":
           case 
"creditcard":
           
$cc_num='';

           
$cc_type='';
                 if(
is_array($fieldName))
                 {
                     if(isset(
$fieldName['cc_num']))
                     {
                         
$cc_num = $fieldName['cc_num'];

                     }
                     if(isset(
$fieldName['cc_type']))
                     {
                         
$cc_type = strtolower($fieldName['cc_type']);
                     }
                 }

               if(!
$this->validateCC($cc_num,$cc_type))
               {
                      echo 
$this->errorArray[$this->errCnt] = $message;

                      
$this->errCnt++;
                      return 
false;
               }
                 
           break;
           case 
"yearrange":
                        if(
is_array($fieldName)){

                            if(
$_REQUEST[$fieldName[0]]    !='' && $_REQUEST[$fieldName[1]]!=''){

                                if(
strlen(trim($_REQUEST[$fieldName[0]]))!=4 || strlen(trim($_REQUEST[$fieldName[1]]))!=4){

                                      
$this->errorArray[$this->errCnt] = "Enter the years in YYYY format only";

                                      
$this->errCnt++;
                                      return 
false; 
                                }
                            }
                            else{
                                if(
$_REQUEST[$fieldName[0]] > $_REQUEST[$fieldName[1]] || $_REQUEST[$fieldName[0]] > date("Y",mktime()) || $_REQUEST[$fieldName[1]] > date("Y",mktime())){

                                      
$this->errorArray[$this->errCnt] = $message;
                                      
$this->errCnt++;
                                      return 
false; 

                                }
                            }
                        }
                        break;
            case 
"yearstilldate":
                        break;
            case 
"req": 
            case 
"required": 
             { 

               if(
trim($_REQUEST[$fieldName])=="") 
               { 
                  
$this->errorArray[$this->errCnt] = $message;

                  
$this->errCnt++;
                  return 
false; 
               }
//if 
               
return true;
               break;             
             }
//case required 

             
            
case "general": 
             { 
                  
$this->errorArray[$this->errCnt] = $message;

                  
$this->errCnt++;
                  return 
false; 
               break;             
             }
//case required 
             
            
case "allReq" :

            case 
"allRequired" :
            {
            
/* 
            PASS $fieldName should be  array();
              THIS CASE IS TO CHECK 

                1. IF ALL OF THE GIVEN FIELD IS ENTERED THEN ALL THE FIELD IS COMPULSARY 
                                            OR

                2. ALL THE FIELD IS COMPULSARY                             
            */
                
for($i=0;$i<count($fieldName);$i++)

                {
                  for(
$i=0;$i<count($fieldName);$i++)
                   {
                      
$tmp = $fieldName[$i];

                        if(
trim($_REQUEST[$tmp])=="")
                        {
                          
$this->errorArray[$this->errCnt] = $message;

                          
$this->errCnt++;
                          return 
false; 
                        }
                   }
                   return 
true;
                }
                break;
            } 
// case allRequired

            
            
case "atleastOne" :
            {
            
/* 
            PASS $fieldName should be  array();
              THIS CASE IS TO CHECK 

                1. AT LEAST ONE OF THE GIVEN FIELDS IS ENTERED THEN ALL THE FIELD IS COMPULSARY 

            */
                
for($i=0;$i<count($fieldName);$i++)
                {
                  for(
$i=0;$i<count($fieldName);$i++)

                   {
                      
$tmp = $fieldName[$i];
                        if(
trim($_REQUEST[$tmp])!="")
                        {

                          return 
true; 
                        }
                   }
                  
$this->errorArray[$this->errCnt] = $message;

                  
$this->errCnt++;
                  return 
false;
                }
                break;
            } 
// case allRequired
            
            
case "maxlength": 

            case 
"maxlen": 
              { 
               if( 
strlen(trim($_REQUEST[$fieldName])) > $chkBase ) 

                 { 
                  
$this->errorArray[$this->errCnt] = $message;
                  
$this->errCnt++;

                  return 
false; 
                 }
//if 
                 
return true;
                 break; 
              }
//case maxlen 
            
case "minlength": 

            case 
"minlen": 
               { 
               if( 
strlen(trim($_REQUEST[$fieldName])) < $chkBase ) 

                 { 
                  
$this->errorArray[$this->errCnt] = $message;
                  
$this->errCnt++;

                  return 
false; 
                 }
//if 
                 
return true;
                 break; 
                }
//case minlen 
            /*    

            case "alnum": 
            case "alphanumeric":             
               { 
                    if(!eregi("^[A-Za-z0-9]$",$_REQUEST[$fieldName]))
                    {
                      $this->errorArray[$this->errCnt] = $message;
                      $this->errCnt++;

                      return false;
                    }
                    return true;
                  break; 
               }//case alphanumeric 
            */   
            
case "int": 
            case 
"num": 

            case 
"numeric": 
            case 
"ticket":
               {
                  if(
is_array($fieldName))
                  {
                     for(
$i=0;$i<count($fieldName);$i++)

                     {                     
                        if(!
eregi("^[0-9]+$",trim($_REQUEST[$fieldName[$i]])) && trim($_REQUEST[$fieldName[$i]]) != "")

                        {
                          
$this->errorArray[$this->errCnt] = $message;
                          
$this->errCnt++;
                          return 
false;

                        }
                     }
                  }
                  else
                  {
                        if(!
eregi("^[0-9]+$",trim($_REQUEST[$fieldName])) && trim($_REQUEST[$fieldName]) != "")

                        {
                          
$this->errorArray[$this->errCnt] = $message;
                          
$this->errCnt++;
                          return 
false;

                        }
                    }        
                    return 
true;
                  break; 
               }
//numeric 
             
case "numericNonZero": 
               { 

               }
//numeric    
            
case "alphabetic": 
            case 
"alpha": 
               { 
                    if(!
eregi("^[a-zA-Z]+$",$_REQUEST[$fieldName]))

                    {
                      
$this->errorArray[$this->errCnt] = $message;
                      
$this->errCnt++;
                      return 
false;

                    }
                    return 
true;
                  break; 
               }
//alpha 
            
case "alnumhyphen":
                {

                    
                    if(!
eregi("^[a-zA-Z0-9]$",$_REQUEST[$fieldName]))

                    {
                      
$this->errorArray[$this->errCnt] = $message;
                      
$this->errCnt++;
                      return 
false;

                    }
                    return 
true;
                  break; 
                }
                
            case 
"alnum":
                {
                    
//echo $_REQUEST[$fieldName];
                    //if(!eregi("^[a-zA-Z0-9_-]+$",$_REQUEST[$fieldName]))
                    //^[a-zA-Z0-9]+[_a-zA-Z0-9-]*(\.[_a-z0-9-]+)*
                    //if(!preg_match('#[a-zA-Z0-9-_]{3,10}#', $_REQUEST[$fieldName]))


                    
if(!eregi("^[a-zA-Z0-9]+([._-][a-zA-Z0-9]+)*$",$_REQUEST[$fieldName]))
                    {
                      
$this->errorArray[$this->errCnt] = $message;

                      
$this->errCnt++;
                      return 
false;
                    }
                    return 
true;
                  break; 
                }
                
            
//^[a-zA-Z0-9]+$"    

            
case "email": 
              { 
                if(
is_array($fieldName))
                {
                  for(
$i=0;$i<count($fieldName);$i++)

                      {
                           if(!
$this->checkMailAddressErr(trim($_REQUEST[$fieldName[$i]])))
                           {
                                  echo 
$this->errorArray[$this->errCnt] = $message;

                                  
$this->errCnt++;
                                  return 
false;
                           }
                      }
                }
                else
                {                
                       if(!
$this->checkMailAddressErr(trim($_REQUEST[$fieldName])))

                       {
                              
$this->errorArray[$this->errCnt] = $message;
                              
$this->errCnt++;
                              return 
false;

                       }
                 }  
               return 
true;
               break; 
              }
//case email 
            
case "sel":  
            case 
"select":

            {
              if(isset(
$_REQUEST[$fieldName]) && trim($_REQUEST[$fieldName]) == '' )
              {
                      
$this->errorArray[$this->errCnt] = $message;

                      
$this->errCnt++;
                      return 
false;
              }
              return 
true;            
             }
// 
            
case "sel2":  

            case 
"select2":  
            {
              if(isset(
$_REQUEST[$fieldName]) && trim($_REQUEST[$fieldName]) == "" )

              {
                      
$this->errorArray[$this->errCnt] = $message;
                      
$this->errCnt++;
                      return 
false;

              }
              return 
true;            
             }
// 
            
case "multiselect":
            {
              if(isset(
$_REQUEST[$fieldName]) && count($_REQUEST[$fieldName])==0)

              {
                      
$this->errorArray[$this->errCnt] = $message;
                      
$this->errCnt++;
                      return 
false;

              }
              return 
true;            
             }
// 
            
case "allOptions":    
            {
              for(
$i=0;$i<count($fieldName);$i++)

              {
                if(isset(
$_REQUEST[$fieldName[$i]]) &&  $_REQUEST[$fieldName[$i]]!=-1 && trim($_REQUEST[$fieldName[$i]])!="" )

                {
                  continue;
                }
                else
                {
                      
$this->errorArray[$this->errCnt] = $message;
                      
$this->errCnt++;

                      return 
false;
                }
              }
               
              return 
true;            
              break;
            }
// case select
            
case "dontselect": 

             {
             
             }
//case dontselect 
            
case "area": 
             {
             
             }
//case area 
            

            
case "radio": 
            case 
"checkbox": 
             {
                if(!isset(
$_REQUEST[$fieldName]))
                {
                      
$this->errorArray[$this->errCnt] = $message;

                      
$this->errCnt++;
                      return 
false;
                }
              return 
true;      
              break;
             }
//case checkbox && radio

             
case "float": 
               { 
               }
//float 
               
break;
             case 
"phone": 
               { 
                   if(!
$this->VALIDATE_USPHONE($_REQUEST[$fieldName]) )

                   {
                      
$this->errorArray[$this->errCnt] = $message;
                      
$this->errCnt++;
                      return 
false;

                   }
               }
//float 
               
break;
               
             case 
"url":
                {
                  if(!
$this->chkUrl($_REQUEST[$fieldName]))

                  {
                    
$this->errorArray[$this->errCnt] = $message;
                    
$this->errCnt++;
                    return 
false;

                  }
                  else
                  { 
                    return 
true;
                  }    
                }
                break;
                case 
"comparepassword":
                {
                    if(
$_REQUEST[$fieldName[0]]  != $_REQUEST[$fieldName[1]] )

                    {
                      
$this->errorArray[$this->errCnt] = $message;
                      
$this->errCnt++;
                      return 
false;

                    }
                }
                case 
"ssn":
                {
                    if(!
isValidSSN($fieldName))
                    {
                      
$this->errorArray[$this->errCnt] = $message;

                      
$this->errCnt++;
                      return 
false;
                    }
                }
                case 
"float":
                case 
"price":
                {
                  if(!
is_numeric($_REQUEST[$fieldName]))

                  {
                    
$this->errorArray[$this->errCnt] = $message;
                    
$this->errCnt++;
                    return 
false;

                  }
                  else
                  { 
                    return 
true;
                  }    
                }
                break;
                case 
"phone":
                case 
"fax":

                {
                
                    if(
$_REQUEST[$fieldName[0]] == "" && $_REQUEST[$fieldName[1]] == "" && $_REQUEST[$fieldName[2]] == "" )

                    {
                      return 
true;
                    }
                    elseif(
$_REQUEST[$fieldName[0]] != "" && $_REQUEST[$fieldName[1]] != "" && $_REQUEST[$fieldName[2]] != "" )

                    {
                     return 
true;
                    }
                    else
                    {
                            
$this->errorArray[$this->errCnt] = $message;

                          
$this->errCnt++;
                        return 
false;
                    }

                }
                break;
            
                
     }
//switch($validation)                    
  
}//function validate($validation,$fieldName,$message="",$chkBase=0)

}// class ValidateFunction

?>