diff --git a/forms/NumericField.php b/forms/NumericField.php index ba519dae6..6039f36d1 100644 --- a/forms/NumericField.php +++ b/forms/NumericField.php @@ -1,19 +1,29 @@ value && !is_numeric(trim($this->value))){ + public function validate($validator) { + if(!$this->value && !$validator->fieldIsRequired($this->name)) { + return true; + } + + $valid = Zend_Locale_Format::isNumber( + trim($this->value), + array('locale' => i18n::get_locale()) + ); + + if(!$valid) { $validator->validationError( $this->name, _t( @@ -22,10 +32,11 @@ class NumericField extends TextField{ ), "validation" ); + return false; - } else{ - return true; } + + return true; } public function dataValue() { diff --git a/tests/forms/NumericFieldTest.php b/tests/forms/NumericFieldTest.php new file mode 100644 index 000000000..bd55c0ae6 --- /dev/null +++ b/tests/forms/NumericFieldTest.php @@ -0,0 +1,37 @@ +setValue('12.00'); + + $validator = new RequiredFields('Number'); + $this->assertTrue($field->validate($validator)); + + $field->setValue('12,00'); + $this->assertFalse($field->validate($validator)); + + $field->setValue('0'); + $this->assertTrue($field->validate($validator)); + + $field->setValue(false); + $this->assertFalse($field->validate($validator)); + + i18n::set_locale('de_DE'); + $field->setValue('12,00'); + $validator = new RequiredFields(); + $this->assertTrue($field->validate($validator)); + + $field->setValue('12.00'); + $this->assertFalse($field->validate($validator)); + } +} \ No newline at end of file