Просмотр исходного кода

[ZF-6532] Zend_Filter_LocalizedToNormalized:

 - hardend number detection

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@15980 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 лет назад
Родитель
Сommit
d8907023dc

+ 12 - 10
library/Zend/Filter/LocalizedToNormalized.php

@@ -93,21 +93,23 @@ class Zend_Filter_LocalizedToNormalized implements Zend_Filter_Interface
      */
     public function filter($value)
     {
-        if (($this->_options['date_format'] === null) && (strpos($value, ':') !== false)) {
+        if (Zend_Locale_Format::isNumber($value, $this->_options)) {
+            return Zend_Locale_Format::getNumber($value, $this->_options);
+//        if (($this->_options['precision'] === 0) && Zend_Locale_Format::isInteger($value, $this->_options)) {
+            // Detect integer
+//            return Zend_Locale_Format::getInteger($value, $this->_options);
+//        } else if (($this->_options['precision'] === null) && Zend_Locale_Format::isFloat($value, $this->_options)) {
+            // Detect float
+//            return Zend_Locale_Format::getFloat($value, $this->_options);
+//        } else if (Zend_Locale_Format::isNumber($value, $this->_options)) {
+            // Detect all other numbers
+//            return Zend_Locale_Format::getNumber($value, $this->_options);
+        } else if (($this->_options['date_format'] === null) && (strpos($value, ':') !== false)) {
             // Special case, no date format specified, detect time input
             return Zend_Locale_Format::getTime($value, $this->_options);
         } else if (Zend_Locale_Format::checkDateFormat($value, $this->_options)) {
             // Detect date or time input
             return Zend_Locale_Format::getDate($value, $this->_options);
-        } else if (($this->_options['precision'] === 0) && Zend_Locale_Format::isInteger($value, $this->_options)) {
-            // Detect integer
-            return Zend_Locale_Format::getInteger($value, $this->_options);
-        } else if (($this->_options['precision'] === null) && Zend_Locale_Format::isFloat($value, $this->_options)) {
-            // Detect float
-            return Zend_Locale_Format::getFloat($value, $this->_options);
-        } else if (Zend_Locale_Format::isNumber($value, $this->_options)) {
-            // Detect all other numbers
-            return Zend_Locale_Format::getNumber($value, $this->_options);
         }
 
         return $value;

+ 17 - 0
tests/Zend/Filter/LocalizedToNormalizedTest.php

@@ -184,4 +184,21 @@ class Zend_Filter_LocalizedToNormalizedTest extends PHPUnit_Framework_TestCase
             $this->assertEquals($output, $filter->filter($input), 'failed filter of ' . var_export($input, 1));
         }
     }
+
+    /**
+     * ZF-6532
+     */
+    public function testLongNumbers()
+    {
+        $filter = new Zend_Filter_LocalizedToNormalized(array('locale' => 'de', 'precision' => 0));
+        $this->assertEquals('1000000', $filter->filter('1.000.000,00'));
+        $this->assertEquals('10000', $filter->filter(10000));
+
+        $this->assertEquals(array(
+            'date_format' => 'dd.MM.yyyy',
+            'locale' => 'de',
+            'day' => '1',
+            'month' => '2',
+            'year' => '4'), $filter->filter('1,2.4'));
+    }
 }