HTMLPurifier 4.4.0
/home/ezyang/Dev/htmlpurifier/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 
00073 // vim: et sw=4 sts=4