468,249 Members | 1,488 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,249 developers. It's quick & easy.

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.

Similar topics

9 posts views Thread by lawrence | last post: by
10 posts views Thread by dave | last post: by
10 posts views Thread by Randell D. | last post: by
67 posts views Thread by Ike Naar | last post: by
5 posts views Thread by Dmitry Martynov | last post: by
7 posts views Thread by laura | last post: by
reply views Thread by NPC403 | last post: by
reply views Thread by kermitthefrogpy | last post: by
reply views Thread by zattat | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.