Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

MINOR fixed validation on CurrencyField. Will no longer parse non-num…

…eric characters out of input. Added test coverage.

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@97057 467b73ca-7a2a-4603-9d3b-597d59a354a9
  • Loading branch information...
commit 6f9177ef43ee469f9f3b33ef5ff5d9b9a80d10cc 1 parent 2996cb3
@rixth rixth authored
Showing with 31 additions and 4 deletions.
  1. +6 −4 forms/CurrencyField.php
  2. +25 −0 tests/forms/CurrencyFieldTest.php
View
10 forms/CurrencyField.php
@@ -9,17 +9,19 @@
*/
class CurrencyField extends TextField {
/**
- * allows the value to be set ( not including $ signs and number format...)
+ * allows the value to be set. removes the first character
+ * if it is not a number (probably a currency symbol)
*/
function setValue($val) {
- $this->value = '$' . number_format(ereg_replace('[^0-9.]',"",$val), 2);
+ $this->value = preg_replace('/^[^\d]/', '', $val);
}
/**
* Overwrite the datavalue before saving to the db ;-)
+ * return 0.00 if no value, or value is non-numeric
*/
function dataValue() {
- if($this->value){
- return preg_replace('/[^0-9.]/',"", $this->value);
+ if($this->value && is_numeric($this->value)){
+ return $this->value;
}else{
return 0.00;
}
View
25 tests/forms/CurrencyFieldTest.php
@@ -0,0 +1,25 @@
+<?php
+
+class CurrencyFieldTest extends SapphireTest {
+ function testValidation() {
+ $field = new CurrencyField('cf');
+ $vr = new RequiredFields();
+
+ $field->setValue('$10.23');
+ $this->assertTrue($field->validate($vr));
+
+ $field->setValue('$1a0.23');
+ $this->assertFalse($field->validate($vr));
+ }
+
+ function testDataValues() {
+ $field = new CurrencyField('cf');
+
+ $field->setValue('$10.34');
+ $this->assertEquals($field->dataValue(), '10.34');
+
+ $field->setValue('$1s0.34');
+ $this->assertEquals($field->dataValue(), '0.00');
+ }
+}
+?>
Please sign in to comment.
Something went wrong with that request. Please try again.