library/HTMLPurifier/AttrDef/Integer.php

Go to the documentation of this file.
00001 <?php
00002 
00010 class HTMLPurifier_AttrDef_Integer extends HTMLPurifier_AttrDef
00011 {
00012     
00016     protected $negative = true;
00017     
00021     protected $zero = true;
00022     
00026     protected $positive = true;
00027     
00033     public function __construct(
00034         $negative = true, $zero = true, $positive = true
00035     ) {
00036         $this->negative = $negative;
00037         $this->zero     = $zero;
00038         $this->positive = $positive;
00039     }
00040     
00041     public function validate($integer, $config, $context) {
00042         
00043         $integer = $this->parseCDATA($integer);
00044         if ($integer === '') return false;
00045         
00046         // we could possibly simply typecast it to integer, but there are
00047         // certain fringe cases that must not return an integer.
00048         
00049         // clip leading sign
00050         if ( $this->negative && $integer[0] === '-' ) {
00051             $digits = substr($integer, 1);
00052             if ($digits === '0') $integer = '0'; // rm minus sign for zero
00053         } elseif( $this->positive && $integer[0] === '+' ) {
00054             $digits = $integer = substr($integer, 1); // rm unnecessary plus
00055         } else {
00056             $digits = $integer;
00057         }
00058         
00059         // test if it's numeric
00060         if (!ctype_digit($digits)) return false;
00061         
00062         // perform scope tests
00063         if (!$this->zero     && $integer == 0) return false;
00064         if (!$this->positive && $integer > 0) return false;
00065         if (!$this->negative && $integer < 0) return false;
00066         
00067         return $integer;
00068         
00069     }
00070     
00071 }
00072 

Generated on Thu Jun 19 18:47:25 2008 for HTMLPurifier by  doxygen 1.5.3