From e814d273c2163e4d0c3453e8cbd18577e684288f Mon Sep 17 00:00:00 2001 From: Manuel Kiessling Date: Tue, 17 Jan 2012 18:33:18 +0100 Subject: [PATCH 1/2] [FormType] Fixed broken MoneyType regexp for JPY The regexp in MoneyType doesn't work if currency format has no decimal (like JPY) and doesn't work either if the currency symbol is unicode This change fixes both issues and adds a unit test --- .../Component/Form/Extension/Core/Type/MoneyType.php | 2 +- .../Form/Extension/Core/Type/MoneyTypeTest.php | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php b/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php index 1dc555999d..7a8bd99fd6 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php @@ -100,7 +100,7 @@ class MoneyType extends AbstractType // the regex also considers non-break spaces (0xC2 or 0xA0 in UTF-8) - preg_match('/^([^\s\xc2\xa0]*)[\s\xc2\xa0]*123[,.]00[\s\xc2\xa0]*([^\s\xc2\xa0]*)$/', $pattern, $matches); + preg_match('/^([^\s\xc2\xa0]*)[\s\xc2\xa0]*123(?:[,.]0+)?[\s\xc2\xa0]*([^\s\xc2\xa0]*)$/u', $pattern, $matches); if (!empty($matches[1])) { self::$patterns[\Locale::getDefault()] = $matches[1].' {{ widget }}'; diff --git a/tests/Symfony/Tests/Component/Form/Extension/Core/Type/MoneyTypeTest.php b/tests/Symfony/Tests/Component/Form/Extension/Core/Type/MoneyTypeTest.php index 8563cfd6b4..d5fdd1bda6 100644 --- a/tests/Symfony/Tests/Component/Form/Extension/Core/Type/MoneyTypeTest.php +++ b/tests/Symfony/Tests/Component/Form/Extension/Core/Type/MoneyTypeTest.php @@ -11,7 +11,10 @@ namespace Symfony\Tests\Component\Form\Extension\Core\Type; +use Symfony\Component\Form\FormFactory; + require_once __DIR__ . '/LocalizedTestCase.php'; +require_once __DIR__ . '/../../../../../../../../src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php'; class MoneyTypeTest extends LocalizedTestCase { @@ -24,4 +27,13 @@ class MoneyTypeTest extends LocalizedTestCase $this->assertSame('{{ widget }} €', $view->get('money_pattern')); } + + public function testMoneyPatternWorksForYen() + { + \Locale::setDefault('en_US'); + + $form = $this->factory->create('money', null, array('currency' => 'JPY')); + $view = $form->createView(); + $this->assertTrue((bool)strstr($view->get('money_pattern'), '¥')); + } } From 6090deef9092e8008cb858b8edff3c79639e44fe Mon Sep 17 00:00:00 2001 From: Manuel Kiessling Date: Thu, 26 Jan 2012 15:40:46 +0100 Subject: [PATCH 2/2] [FormType] Adopted MoneyTypeTest::testMoneyPatternWorksForYen to CS --- .../Tests/Component/Form/Extension/Core/Type/MoneyTypeTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Symfony/Tests/Component/Form/Extension/Core/Type/MoneyTypeTest.php b/tests/Symfony/Tests/Component/Form/Extension/Core/Type/MoneyTypeTest.php index d5fdd1bda6..cfe7c965da 100644 --- a/tests/Symfony/Tests/Component/Form/Extension/Core/Type/MoneyTypeTest.php +++ b/tests/Symfony/Tests/Component/Form/Extension/Core/Type/MoneyTypeTest.php @@ -34,6 +34,6 @@ class MoneyTypeTest extends LocalizedTestCase $form = $this->factory->create('money', null, array('currency' => 'JPY')); $view = $form->createView(); - $this->assertTrue((bool)strstr($view->get('money_pattern'), '¥')); + $this->assertTrue((Boolean) strstr($view->get('money_pattern'), '¥')); } }