I decided as PHP developer I should learn another scripting language. After running into RoR several times I decided I’d be better off just learning Ruby. Asking my boss for any advise he told me to just rewrite what I do at work with Ruby.
Well I didn’t take is advice on a per word basis, but This is my first ruby script. It’s designed to be run from the command line. Any suggestions on making it better are welcomed.
This is a pretty straight forward function, slightly harder than your normal “Hello World” but doesn’t do anything to revolutionary. Little surprised about the lack of increment/decrement operator, but I recall reading that it isn’t not there because it is unclear.
Web Development
A while at work I came across some random reference where I need to validate that a $_POST or $_GET value was an integer. Now this is a fairy common problem, but like many PHP programmers I had never found Filter Var Functions. I came across what ended up being an extremely tedious work around.
The issue arises when a variable needs to be an integer where 0 is a possible value. Most databases don’t use 0 as indexs so this is a semi rare situation, but often happens on drop downs and sliders. The issue is as follows
$not_int = 'asdf';
$int = '5';
$int_2 = 0;
is_int($not_int); //false
is_int($int); //false(it's a string duh
is_int($int_2); //true
intval($not_int); // 0
intval($int) // 5
intval($int_2); // 0
/* Then I had to figure out how to determine if the original value was 0; Meaning if I passed in a 0, but it was a string My original theory was*/
if(intval($not_int) != $not_int) {}
/* This should've worked, btu upon further inspection i release with type converting for comparison i was essentially doing */
if(intval($not_int) != (int)$not_int){} // Identical so they're always equal
$int = '5';
$int_2 = 0;</div>
is_int($not_int); //false
is_int($int); //false(it's a string duh
is_int($int_2); //true
intval($not_int); // 0
intval($int) // 5
intval($int_2); // 0
/* Then I had to figure out how to determine if the original value was 0; Meaning if I passed in a 0, but it was a string My original theory was*/
if(intval($not_int) != $not_int) {}
/* This should've worked, btu upon further inspection i release with type converting for comparison i was essentially doing */
if(intval($not_int) != (int)$not_int){} // Identical so they're always equal</div>
The solution is filter_var.
Filter var and it’s sister function sanitize var gives you a nice solution to this problem as well as many other problems in the web.
if(filter_var($not_int, FILTER_VALIDATE_INT) !== false ) {}
The tricky thing about this function is it returns the integer value, so be careful to use !== when comparing to false.
There are a large number of “filters” that can replace common used regexp, IP address, email, url. I’d suggest giving this a really good going over.
Web Development