root/afridex/plugins/Flutter/purifier_lib/HTMLPurifier/AttrDef/CSS/Number.php @ 23

Revision 21, 1.7 kB (checked in by admin, 18 years ago)
Line 
1<?php
2
3/**
4 * Validates a number as defined by the CSS spec.
5 */
6class HTMLPurifier_AttrDef_CSS_Number extends HTMLPurifier_AttrDef
7{
8   
9    /**
10     * Bool indicating whether or not only positive values allowed.
11     */
12    protected $non_negative = false;
13   
14    /**
15     * @param $non_negative Bool indicating whether negatives are forbidden
16     */
17    public function __construct($non_negative = false) {
18        $this->non_negative = $non_negative;
19    }
20   
21    public function validate($number, $config, $context) {
22       
23        $number = $this->parseCDATA($number);
24       
25        if ($number === '') return false;
26        if ($number === '0') return '0';
27       
28        $sign = '';
29        switch ($number[0]) {
30            case '-':
31                if ($this->non_negative) return false;
32                $sign = '-';
33            case '+':
34                $number = substr($number, 1);
35        }
36       
37        if (ctype_digit($number)) {
38            $number = ltrim($number, '0');
39            return $number ? $sign . $number : '0';
40        }
41       
42        // Period is the only non-numeric character allowed
43        if (strpos($number, '.') === false) return false;
44       
45        list($left, $right) = explode('.', $number, 2);
46       
47        if ($left === '' && $right === '') return false;
48        if ($left !== '' && !ctype_digit($left)) return false;
49       
50        $left  = ltrim($left,  '0');
51        $right = rtrim($right, '0');
52       
53        if ($right === '') {
54            return $left ? $sign . $left : '0';
55        } elseif (!ctype_digit($right)) {
56            return false;
57        }
58       
59        return $sign . $left . '.' . $right;
60       
61    }
62   
63}
64
Note: See TracBrowser for help on using the browser.