ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
Number.php
Go to the documentation of this file.
1 <?php
2 
7 {
8 
13  protected $non_negative = false;
14 
18  public function __construct($non_negative = false)
19  {
20  $this->non_negative = $non_negative;
21  }
22 
31  public function validate($number, $config, $context)
32  {
33  $number = $this->parseCDATA($number);
34 
35  if ($number === '') {
36  return false;
37  }
38  if ($number === '0') {
39  return '0';
40  }
41 
42  $sign = '';
43  switch ($number[0]) {
44  case '-':
45  if ($this->non_negative) {
46  return false;
47  }
48  $sign = '-';
49  case '+':
50  $number = substr($number, 1);
51  }
52 
53  if (ctype_digit($number)) {
54  $number = ltrim($number, '0');
55  return $number ? $sign . $number : '0';
56  }
57 
58  // Period is the only non-numeric character allowed
59  if (strpos($number, '.') === false) {
60  return false;
61  }
62 
63  list($left, $right) = explode('.', $number, 2);
64 
65  if ($left === '' && $right === '') {
66  return false;
67  }
68  if ($left !== '' && !ctype_digit($left)) {
69  return false;
70  }
71 
72  $left = ltrim($left, '0');
73  $right = rtrim($right, '0');
74 
75  if ($right === '') {
76  return $left ? $sign . $left : '0';
77  } elseif (!ctype_digit($right)) {
78  return false;
79  }
80  return $sign . $left . '.' . $right;
81  }
82 }
83 
84 // vim: et sw=4 sts=4