Вход Регистрация
Файл: libs/HTMLPurifier/HTMLPurifier/AttrDef/Integer.php
Строк: 90
<?php

/**
 * Validates an integer.
 * @note While this class was modeled off the CSS definition, no currently
 *       allowed CSS uses this type.  The properties that do are: widows,
 *       orphans, z-index, counter-increment, counter-reset.  Some of the
 *       HTML attributes, however, find use for a non-negative version of this.
 */
class HTMLPurifier_AttrDef_Integer extends HTMLPurifier_AttrDef
{

    
/**
     * Bool indicating whether or not negative values are allowed
     */
    
protected $negative true;

    
/**
     * Bool indicating whether or not zero is allowed
     */
    
protected $zero true;

    
/**
     * Bool indicating whether or not positive values are allowed
     */
    
protected $positive true;

    
/**
     * @param $negative Bool indicating whether or not negative values are allowed
     * @param $zero Bool indicating whether or not zero is allowed
     * @param $positive Bool indicating whether or not positive values are allowed
     */
    
public function __construct(
        
$negative true$zero true$positive true
    
) {
        
$this->negative $negative;
        
$this->zero     $zero;
        
$this->positive $positive;
    }

    public function 
validate($integer$config$context) {

        
$integer $this->parseCDATA($integer);
        if (
$integer === '') return false;

        
// we could possibly simply typecast it to integer, but there are
        // certain fringe cases that must not return an integer.

        // clip leading sign
        
if ( $this->negative && $integer[0] === '-' ) {
            
$digits substr($integer1);
            if (
$digits === '0'$integer '0'// rm minus sign for zero
        
} elseif( $this->positive && $integer[0] === '+' ) {
            
$digits $integer substr($integer1); // rm unnecessary plus
        
} else {
            
$digits $integer;
        }

        
// test if it's numeric
        
if (!ctype_digit($digits)) return false;

        
// perform scope tests
        
if (!$this->zero     && $integer == 0) return false;
        if (!
$this->positive && $integer 0) return false;
        if (!
$this->negative && $integer 0) return false;

        return 
$integer;

    }

}

// vim: et sw=4 sts=4
Онлайн: 0
Реклама