瀏覽代碼

[ZF-9204] Zend_Filter:

- fixed CamelCase seperator to recognise ending numbers

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21088 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 年之前
父節點
當前提交
f2a25b9037

+ 2 - 2
library/Zend/Filter/Word/CamelCaseToSeparator.php

@@ -36,10 +36,10 @@ class Zend_Filter_Word_CamelCaseToSeparator extends Zend_Filter_Word_Separator_A
     public function filter($value)
     {
         if (self::isUnicodeSupportEnabled()) {
-            parent::setMatchPattern(array('#(?<=(?:\p{Lu}))(\p{Lu}\p{Ll})#','#(?<=(?:\p{Ll}))(\p{Lu})#'));
+            parent::setMatchPattern(array('#(?<=(?:\p{Lu}))(\p{Lu}\p{Ll})#','#(?<=(?:\p{Ll}|\p{Nd}))(\p{Lu})#'));
             parent::setReplacement(array($this->_separator . '\1', $this->_separator . '\1'));
         } else {
-            parent::setMatchPattern(array('#(?<=(?:[A-Z]))([A-Z]+)([A-Z][A-z])#', '#(?<=(?:[a-z]))([A-Z])#'));
+            parent::setMatchPattern(array('#(?<=(?:[A-Z]))([A-Z]+)([A-Z][A-z])#', '#(?<=(?:[a-z0-9]))([A-Z])#'));
             parent::setReplacement(array('\1' . $this->_separator . '\2', $this->_separator . '\1'));
         }
 

+ 24 - 0
tests/Zend/Filter/Word/CamelCaseToUnderscoreTest.php

@@ -65,6 +65,30 @@ class Zend_Filter_Word_CamelCaseToUnderscoreTest extends PHPUnit_Framework_TestC
         $this->assertNotEquals($string, $filtered);
         $this->assertEquals('Camel_Cased_Words', $filtered);
     }
+
+    public function testFilterSeperatingNumbersToUnterscore()
+    {
+        $string = 'PaTitle';
+        $filter   = new Zend_Filter_Word_CamelCaseToUnderscore();
+        $filtered = $filter->filter($string);
+
+        $this->assertNotEquals($string, $filtered);
+        $this->assertEquals('Pa_Title', $filtered);
+
+        $string = 'Pa2Title';
+        $filter   = new Zend_Filter_Word_CamelCaseToUnderscore();
+        $filtered = $filter->filter($string);
+
+        $this->assertNotEquals($string, $filtered);
+        $this->assertEquals('Pa2_Title', $filtered);
+
+        $string = 'Pa2aTitle';
+        $filter   = new Zend_Filter_Word_CamelCaseToUnderscore();
+        $filtered = $filter->filter($string);
+
+        $this->assertNotEquals($string, $filtered);
+        $this->assertEquals('Pa2a_Title', $filtered);
+    }
 }
 
 // Call Zend_Filter_Word_CamelCaseToUnderscoreTest::main() if this source file is executed directly.