468,249 Members | 1,488 Online

# Test whether string is valid integer

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.
Jul 17 '05 #1
6 6342 Paul E Collins wrote:
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.

intval( \$string ) == \$string

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

Jul 17 '05 #2
"Paul E Collins" <fi******************@CL4.org> wrote:
Given a string variable (form input), how can I
determine whether it represents a 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.
Jul 17 '05 #3
Rutger Claes wrote:
Paul E Collins wrote:

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.

intval( \$string ) == \$string

works for me...

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 - sp**@koivi.com
http://www.koivi.com
Jul 17 '05 #4
Justin Koivisto wrote:
Rutger Claes wrote:
Paul E Collins wrote:

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.

intval( \$string ) == \$string

works for me...

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;

Sorry, that should have been:

return intval(\$n);

I was getting too far ahead of myself typing it out...
}else{
return FALSE;
}
}
}else{
return FALSE;
}
}

--
Justin Koivisto - sp**@koivi.com
http://www.koivi.com
Jul 17 '05 #5
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
"Paul E Collins" <fi******************@CL4.org> wrote in message
news:cn**********@titan.btinternet.com...
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.

Jul 17 '05 #6
Paul E Collins wrote:
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.

"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';

?>
Jul 17 '05 #7

### This discussion thread is closed

Replies have been disabled for this discussion.