'dreizehn' => 13,
'vierzehn' => 14,
'fünfzehn' => 15,
- 'sechszehn' => 16,
+ 'sechzehn' => 16,
'siebzehn' => 17,
'achtzehn' => 18,
'neunzehn' => 19,
{
// preprocess?
- $string = $this->_directReplacements($string);
$string = $this->_replaceTenPrefixes($string);
+ $string = $this->_directReplacements($string);
$string = $this->_replaceBigPrefixes($string);
$string = $this->_fractionalAddition($string);
+ $string = $this->_andition($string);
return $string;
}
return $string;
}
+ /**
+ * hundreds, thousands, millions, etc.
+ */
+ protected function _replaceBigPrefixes($string)
+ {
+ foreach ($this->BIG_PREFIXES as $bp => $bp_replacement) {
+ $string = preg_replace_callback(
+ '/(\d*) *' . $bp . '/i',
+ create_function(
+ '$m',
+ '$factor = (int)$m[1]; if (!$factor) $factor = 1; return (' . $bp_replacement . ' * $factor) . "und";'
+ ),
+ $string);
+ }
+ return $string;
+ }
+
+ protected function _andition($string)
+ {
+ while (preg_match('/(\d+)((?:und)+)(\d*)(?=[^\w]|$)/i', $string, $sc, PREG_OFFSET_CAPTURE)) {
+ $string = substr($string, 0, $sc[1][1]) . ((int)$sc[1][0] + (int)$sc[3][0]) . substr($string, $sc[3][1] + strlen($sc[3][0]));
+ }
+ return $string;
+ }
+
}