On Fri, Mar 13, 2009 at 12:34 PM, Matt Neimeyer <m...@neimeyer.org> wrote:
> I'm trying to sanitize some numeric data that's coming to us from
> another system which I have no control over where all fields are
> character fields with no formatting from the end user so data is a
> mishmash of clean and mixed types of dirty.
> I know I can use intval and floatval to sanitize if the numeric data
> is at the front of the string but what about when it's not?
> For example, Jersey Number = #45 or Dues = $1,234.56....
> I see in the comments at php.net for floatval a lot of very complex
> solutions... am I missing something about the following that wouldn't
> cover me?
> <?php $output = floatval(ereg_replace("[^-0-9\.]","",$input)); ?>
> I'm willing to assuming only US formatted numbers... and knowing that
> if they put in 45/46 for jersey it would come out 4546 (but I might
> put in additional code for that specific case on that specific
> field...). I'm also looking for something that I can generically apply
> to any numeric field.

Man... I went completely apeshit on this with regex and made this
long, complicated string to match numeric values and strip out
possible false positives like IP addresses, etc... if you really want
it, I'll post it. Anyway, the point I'm going to make instead is that
you need to do more than just strip out everything but numbers and
periods unless all of your values are going to be in the format "Some
name = [possible junk]<some value>[possible junk]". If all of your
values are guaranteed to be in this format, and there will be no
values that would act as false positives (like IP addresses), then
stripping everything but numbers and periods should be fine.

However, values like "1 and 5" will turn into "15", "3 sizes. 30 day
trial." will return "3.30", etc... just something to keep in mind (if
cases like these can arise in your data).

// Todd

PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to