# Test whether string is valid integer

#### Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

•  Subject
• Author
• Posted on
Given a string variable (form input), how can I determine whether it
represents a valid integer?

is_numeric is true for floats as well as integers, and is_int always
fails on a string.

P.

## Re: Test whether string is valid integer

Okay, I've come up with a solution:

function isInteger(\$x)
{
return (\$x === (string) (int) \$x);
}

It returns false if \$x has leading zeros, but that doesn't matter for
my purposes.

P.

## Re: Test whether string is valid integer

Paul E Collins wrote:

intval( \$string ) == \$string

works for me...
--
Rutger Claes                                                rgc@rgc.tld
Replace tld with top level domain of belgium to contact me    pgp:0x3B7D6BD6
From listening comes wisdom and from speaking repentance.

## Re: Test whether string is valid integer

Rutger Claes wrote:

Depends on how strict you need to be...

intval(\$n)==\$n will return TRUE if you have a float like 5.0

However, if you use:

intval(\$n)===\$n

Then the string '5' would fail...

If you need to reject floats, but need to use strings as well, you'll
really need to do something like this (pulled from something I did a
couple years ago):

/**
*   input_intval
*
*   Takes a variable and returns the integer value that corresponds
*   to the value. If the value cannot be represented by an integer,
*   FALSE is returned.
*
*   @param  \$n  [mixed] Value to check.
*   @result Returns an integer value or FALSE. Check for FALSE using
*           if(input_intval(\$n)===FALSE) in case of integer < 0 being
*           returned.
**/
function input_intval(\$n){
if(is_numeric(\$n)){
if(is_int(\$n)){
return \$n;
}else{
// this is a float...
if(intval(\$n)==\$n){
return \$n;
}else{
return FALSE;
}
}
}else{
return FALSE;
}
}

--
Justin Koivisto - spam@koivi.com
http://www.koivi.com

## Re: Test whether string is valid integer

Justin Koivisto wrote:

Sorry, that should have been:

return intval(\$n);

I was getting too far ahead of myself typing it out...

--
Justin Koivisto - spam@koivi.com
http://www.koivi.com

## Re: Test whether string is valid integer

Here is the code I use:

\$integer = (int)\$value;
if ((string)\$value <> (string)\$integer) {
\$this->errors[\$field] = "Value is not an integer";
return \$value;
} // if

--
Tony Marston

http://www.tonymarston.net

## Re: Test whether string is valid integer

Paul E Collins wrote:

"Zero" sensitive function :) 5.0000 is integer 5.0001 is not...

<?php

function checkInteger(\$input) {

// Check type
if(is_integer(\$input)) {
return true;
} // if

// Typecast
\$in = (integer) \$input;

// Check strlen
if((\$in == \$input)  && (strlen(\$in) == strlen(\$input))) {
return true;

// No '.'?
} elseif(strpos(\$input, '.') === false) {
return false;

// We have '.'
} else {

// One for dot, other for zeros
\$dig_num = strlen(\$input) - strlen(\$in) - 1;

// Get zeros
\$zeros = '.';
for(\$i = 0; \$i < \$dig_num; \$i++) {
\$zeros .= '0';
} // form

// Final check
return (string) \$in . \$zeros == \$input ? true : false;

} // if

} // func checkInteger

// Test it with this code!
print checkInteger('5.00000') ? 'OK, int' : 'Not OK';

?>