diff --git a/library/HTMLPurifier/AttrDef/Number.php b/library/HTMLPurifier/AttrDef/Number.php new file mode 100644 index 00000000..d596d136 --- /dev/null +++ b/library/HTMLPurifier/AttrDef/Number.php @@ -0,0 +1,45 @@ +parseCDATA($number); + + if ($number === '') return false; + + $sign = ''; + switch ($number[0]) { + case '-': + $sign = '-'; + case '+': + $number = substr($number, 1); + } + + if (ctype_digit($number)) { + $number = ltrim($number, '0'); + return $number ? $sign . $number : '0'; + } + if (!strpos($number, '.')) return false; + + list($left, $right) = explode('.', $number, 2); + + if (!ctype_digit($left)) return false; + $left = ltrim($left, '0'); + + $right = rtrim($right, '0'); + + if ($right === '') { + return $left ? $sign . $left : '0'; + } elseif (!ctype_digit($right)) { + return false; + } + + return $sign . $left . '.' . $right; + + } + +} + +?> \ No newline at end of file diff --git a/tests/HTMLPurifier/AttrDef/NumberTest.php b/tests/HTMLPurifier/AttrDef/NumberTest.php new file mode 100644 index 00000000..4c6f3b13 --- /dev/null +++ b/tests/HTMLPurifier/AttrDef/NumberTest.php @@ -0,0 +1,31 @@ +def = new HTMLPurifier_AttrDef_Number(); + + $this->assertDef('0'); + $this->assertDef('34'); + $this->assertDef('4.5'); + $this->assertDef('-56.9'); + + $this->assertDef('000', '0'); + $this->assertDef(' 9', '9'); + $this->assertDef('+5.0000', '5'); + $this->assertDef('02.20', '2.2'); + $this->assertDef('2.', '2'); + + $this->assertDef('.', false); + $this->assertDef('asdf', false); + $this->assertDef('0.5.6', false); + + } + +} + +?> \ No newline at end of file diff --git a/tests/index.php b/tests/index.php index c035dd6a..c4f00230 100644 --- a/tests/index.php +++ b/tests/index.php @@ -67,6 +67,7 @@ $test_files[] = 'AttrDef/CSSTest.php'; $test_files[] = 'AttrDef/CompositeTest.php'; $test_files[] = 'AttrDef/ColorTest.php'; $test_files[] = 'AttrDef/IntegerTest.php'; +$test_files[] = 'AttrDef/NumberTest.php'; $test_files[] = 'IDAccumulatorTest.php'; $test_files[] = 'TagTransformTest.php'; $test_files[] = 'AttrTransform/LangTest.php';