Page 1 of 1

val_fun example

PostPosted: Mon Dec 01, 2008 4:42 pm
by admin
Someone asked me to give an example on how to use the val_info option so here it goes.

Code: Select all
$tableColumns['email'] = array('display_text' => 'Email', 'perms' => 'EVCTAXQS','val_fun' => array(&$this,'valEmail'));


Code: Select all
   function valEmail($col,$val,$info)
   {
      if (preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $val) || preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$val))
      {
         return true;
      }
      else
      {
         return false;
      }
   }

Re: val_fun example

PostPosted: Tue May 19, 2020 7:20 pm
by edtiley
I realize this is an old thread, but I've created a validation function for Vehicle Identification numbers (VIN) following this example.

The problem is that when the user presses TAB to move to the next field the validation is bypassed. If the VIN is invalid and the user presses ENTER, the validation function is called and displays the toolTipMsg, so the validation function works.

How do I get the validation to be called when the user presses TAB???


Code: Select all
      $tableColumns['vin'] = array(
      'display_text' => 'VIN',
               'val_fun' => array(&$this,'validateVin'),
//            'input_info' => 'onfocusout="validateVin();"',
        'perms' => 'AETV'
      );


Later in the class is the code for the validation:

Code: Select all
    public static function validateVin($col,$val,$info){
        $vin=strtoupper($val);
       
        //17 Chars <> I,O,Q - Last 4 Numeric
        if(preg_match('/[A-HJ-NPR-Z0-9]{13}[0-9]{4}/', $vin) === 1){
           
            $sum = self::getNumVal($vin[0]) * 8;
            $sum += self::getNumVal($vin[1]) * 7;
            $sum += self::getNumVal($vin[2]) * 6;
            $sum += self::getNumVal($vin[3]) * 5;
            $sum += self::getNumVal($vin[4]) * 4;
            $sum += self::getNumVal($vin[5]) * 3;
            $sum += self::getNumVal($vin[6]) * 2;
            $sum += self::getNumVal($vin[7]) * 10;
            $sum += self::getNumVal($vin[9]) * 9;
            $sum += self::getNumVal($vin[10]) * 8;
            $sum += self::getNumVal($vin[11]) * 7;
            $sum += self::getNumVal($vin[12]) * 6;
            $sum += self::getNumVal($vin[13]) * 5;
            $sum += self::getNumVal($vin[14]) * 4;
            $sum += self::getNumVal($vin[15]) * 3;
            $sum += self::getNumVal($vin[16]) * 2;
           
            $checksum = $sum % 11; //Modulus
           
            return $checksum == $vin[8] || ($checksum == 10 && $vin[8] == 'X');
        }
          // Create custom validation message and return false
          $this->Editor->showDefaultValidationMsg = false;
          $this->Editor->addTooltipMsg('Not A Valid Vin #');
          return false;

    }
   
    private static function getNumVal($char){
        if(in_array($char, ['A', 'J', '1'])) {return 1;}
        elseif(in_array($char, ['B', 'K', 'S', '2'])) {return 2;}
        elseif(in_array($char, ['C', 'L', 'T', '3'])) {return 3;}
        elseif(in_array($char, ['D', 'M', 'U', '4'])) {return 4;}
        elseif(in_array($char, ['E', 'N', 'V', '5'])) {return 5;}
        elseif(in_array($char, ['F', 'W', '6'])) {return 6;}
        elseif(in_array($char, ['G', 'P', 'X', '7'])) {return 7;}
        elseif(in_array($char, ['H', 'Y', '8'])) {return 8;}
        elseif(in_array($char, ['R', 'Z', '9'])) {return 9;}
        elseif($char == 0) {return 0;}
    }   
   function __construct()
         ...