Edit report at http://bugs.php.net/bug.php?id=40156&edit=1
ID: 40156
Comment by: ndesbarats at gmail dot com
Reported by: pmjones88 at gmail dot com
Summary: FILTER_SANITIZE_NUMBER_FLOAT incorrect when multiple
dots in value
Status: Bogus
Type: Bug
Package: Filter related
Operating System: Mac OS X
PHP Version: 5.2.0
Block user comment: N
New Comment:
Had the same problems as pmjones88, and wrote a function to extract
floats (and ints) more intelligently from strings that contain
superfluous characters. Hope this helps. I think something like this
should be added as a core PHP function, since I have to believe that it
addresses a pretty common need:
http://www.choosingsmarter.com/2010/09/extracting-a-number-from-a-string-in-php.html
Previous Comments:
------------------------------------------------------------------------
[2007-01-17 20:36:42] [email protected]
The string you're passing is obviously not a valid float... as it has
all kinds of weird stuff around it. Of course it returns "false"
(invalid data) in this case. ext/filter is not a regular expression
collection... it's there to filter out unwanted characters (sanitizing
filters) or to validate the contents of a string as a specific type of
data.
------------------------------------------------------------------------
[2007-01-17 20:33:49] pmjones88 at gmail dot com
When I try pajoye's suggestion, to use validation, it does not return a
float as he says it should. Instead, it (properly) returns false.
$val = 'abc ... 123.45 ,.../';
$san = filter_var($val, FILTER_VALIDATE_FLOAT);
var_dump($san); // (bool) false
What's a guy gotta do to get a float out of that?
------------------------------------------------------------------------
[2007-01-17 20:26:02] [email protected]
Again, sanitizing filter just sanitizes the input data, it does not
validate it.
------------------------------------------------------------------------
[2007-01-17 20:25:54] [email protected]
No, that's what the logical filters are for.
------------------------------------------------------------------------
[2007-01-17 20:23:14] pmjones88 at gmail dot com
Then it should at least fail when it realizes that the value isn't going
to be useful as a float. Maybe I don't get it; a "sanitized" float
should return as a "float". Otherwise you're just stripping non-numeric
characters, which is not quote the same thing.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/bug.php?id=40156
--
Edit this bug report at http://bugs.php.net/bug.php?id=40156&edit=1