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] der...@php.net 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] tony2...@php.net Again, sanitizing filter just sanitizes the input data, it does not validate it. ------------------------------------------------------------------------ [2007-01-17 20:25:54] der...@php.net 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