You could take advantage of the type conversion performed by php as
demonstrated in this snippet (the trick is in multiplying $value by 1). if
you need to distinguish further between doubles and floats you can do a
regex on $value once you've established it's type:

<?php

$a[] = "1234";
$a[] = "1234.567";
$a[] = "1.234e-8";
$a[] = "3oranges";

foreach($a as $value) {
        print($value.": ");
        if(is_numeric($value)) {
                $tmp = 1 * $value;
                printf("is %s<BR>\n", gettype($tmp));
        }
        else print("is not a number");
}

?>

Moody


-----Original Message-----
From: Johnson, Kirk [mailto:[EMAIL PROTECTED]]
Sent: 19 March 2001 15:55
To: [EMAIL PROTECTED]
Subject: RE: [PHP] how do i get a variable type? - not that simple


Jim,

Thanks for sharing all your hard work. Have you seen checkdate()?
http://www.php.net/manual/en/function.checkdate.php

Kirk

> -----Original Message-----
> From: Ide, Jim [mailto:[EMAIL PROTECTED]]
> Sent: Monday, March 19, 2001 6:38 AM
> To: 'phpman'; [EMAIL PROTECTED]
> Subject: RE: [PHP] how do i get a variable type? - not that simple
>
>
> These are the functions I use to determine if
> a string value is a valid integer, real, date, etc.
> Hope this helps.
>
> ps - please let me know if you find any errors.  thanx.
>
> <?php
>
> function IsValidBoolean($p) {
>       if ( isset($p) ) {
>               if ((strtolower($p) == "true") or (strtolower($p) ==
> "false"))             return TRUE;
>       }
>       return FALSE;
> }
>
> function IsValidMemo($p) {
>
>       // If $p contains any characters other than printable ascii,
>       // or \r or \n, return FALSE.
>
>       if (trim($p) == "")                     return TRUE;
>       if ( ereg("[^\r\n\x20-\x7E]", $p) )     return FALSE;
>       return TRUE;
> }
>
> function IsValidString($p) {
>
>       // If $p contains any characters other than printable ascii,
>       // return FALSE.
>
>       if (trim($p) == "")                     return TRUE;
>       if ( ereg("[^\x20-\x7E]", $p) )         return FALSE;
>       return TRUE;
> }
>
> function IsValidInteger($p) {
>
>       // return TRUE if:
>       // 1. $p is not equal to ""
>       // 2. $p consists of 1 or more digits, optionally preceded by a
> minus sign
>
>       if ( isset($p) )        return ereg("^\-?[0-9]+$",$p);
>       return FALSE;
> }
>
> function IsValidReal($p) {
>
>       // return TRUE if:
>       // 1. $p is not equal to ""
>       // 2. $p begins with optional minus sign, followed by 1 or more
> digits, followed by a decimal point,
>       //    followed by 1 or more digits
>       // 3. $p can be optionally preceded by a minus sign
>
>       if ( isset($p) )        return ereg("^\-?[0-9]+\.[0-9]+$",$p);
>       return FALSE;
> }
>
> function IsLeapYear($y) {
>       if ( (($y % 4) == 0) && (($y % 100) != 0) || (($y % 400) == 0))
> return TRUE;
>       return FALSE;
> }
>
> function IsValidDate($p) {
>
>       // return TRUE if:
>       // 1. $p is not equal to ""
>       // 2. $p consists of 4 digits followed by minus sign,
> followed by 2
> digits, followed by
>       //    minus sign, followed by 2 digits
>       // example 1995-02-03
>
>       if ( ! isset($p) )
> return FALSE;
>       if ( ! ereg("^([0-9]{4})\-([0-9]{2})\-([0-9]{2})$",$p) )
> return FALSE;
>
>       $t = explode("-",$p);
>       if ( count($t) != 3 )   return FALSE;
>       $y = $t[0];
>       $m = $t[1];
>       $d = $t[2];
>
>       return IsValidDate2($y,$m,$d);
> }
>
> function IsValidDate2($y,$m,$d) {
>
>       if ( ($m < 1) or ($m > 12) )            return FALSE;
>       if ( ($d < 1) or ($d > 31) )            return FALSE;
>
>       // 30 days has sept, apr, jun, and nov (all the rest
> have 31 [except
> for feb])
>       //               9    4    6        11
>
>       if ( ($m == 4) or ($m == 6) or ($m == 9) or ($m == 11) ) {
>               if ($d > 30)    return FALSE;
>       } elseif ($m == 2) {
>               if ( IsLeapYear($y) ) {
>                       if ( $d > 29 )  return FALSE;
>               } else {
>                       if ( $d > 28 )  return FALSE;
>               }
>       }
>       return TRUE;
> }
>
> function IsValidTime($p) {
>
>       // return TRUE if:
>       // 1. $p is not equal to ""
>       // 2. $p consists of 2 digits in the range 00 to 23,
>       //      followed by a colon,
>       //      followed by 2 digits in the range 00 to 59,
>       //      followed by a colon,
>       //      followed by 2 digits in the range 00 to 59.
>       // example 14:45:02
>
>       if ( ! isset($p) )
> return FALSE;
>       if ( ! ereg("^([0-9]{2})\:([0-9]{2})\:([0-9]{2})$",$p) )
> return FALSE;
>
>       $t = explode(":",$p);
>       if ( count($t) != 3 )   return FALSE;
>       $h = $t[0];
>       $m = $t[1];
>       $s = $t[2];
>
>       return IsValidTime2($h,$m,$s);
> }
>
> function IsValidTime2($h,$m,$s) {
>
>       if ( ($h < 0) or ($h > 23) )    return FALSE;
>       if ( ($m < 0) or ($m > 59) )    return FALSE;
>       if ( ($s < 0) or ($s > 59) )    return FALSE;
>
>       return TRUE;
> }
>
> function IsValidDateTime($p) {
>
>       // return TRUE if:
>       // 1. $p is not equal to ""
>       // 2. $p consists of a valid date (validated by
> IsValidDate() above)
>       //      followed by a space
>       //      followed by a valid time (validated by
> IsValidTime() above)
>       // example: 1998-04-21 22:01:34
>
>       if ( ! isset($p) )              return FALSE;
>
>       $temp = explode(" ",$p);
>       if ( count($temp) != 2 )        return FALSE;
>       $d = $temp[0];
>       $t = $temp[1];
>       if ( ! IsValidDate($d) )        return FALSE;
>       if ( ! IsValidTime($t) )        return FALSE;
>
>       return TRUE;
> }
>
> function IsValidTimeStamp($p) {
>
>       // return TRUE if:
>       // 1. $p is not equal to ""
>       // 2. $p consists of a datetime in YYYYMMDDHHMMSS format
>       // example: 19980421220134
>
>       if ( ! isset($p) )                      return FALSE;
>       if ( ! ereg("^([0-9]{14})$",$p) )       return FALSE;
>
>       $y = substr($p,0,4);
>       $m = substr($p,4,2);
>       $d = substr($p,6,2);
>       $h = substr($p,8,2);
>       $min = substr($p,10,2);
>       $s = substr($p,12,2);
>
>       if ( ! IsValidDate2($y,$m,$d) )         return FALSE;
>       if ( ! IsValidTime2($h,$min,$s) )       return FALSE;
>
>       return TRUE;
> }
>
> function TestVF($type,$fn,$v,$p) {
>
>       // TestVF = TestValidationFunction
>
>       // example 1:
> TestVF("integer","IsValidInteger",TRUE,"15"); //
> ok, 15 is a valid integer, so print nothing
>       // example 2:
> TestVF("integer","IsValidInteger",FALSE,"15");        //
> error, 15 *is* a valid integer, so print error
>       // example 3:
> TestVF("integer","IsValidInteger",FALSE,"abc");       //
> ok, "abc" is NOT a valid integer, so print nothing
>       // example 4:
> TestVF("integer","IsValidInteger",TRUE,"abc");        //
> error, "abc" is NOT a valid integer, so print error
>
>       $IsValid = $fn($p);
>       if ( $v ) {
>               if ( $IsValid )         return;
>               echo "error, is NOT a valid $type: " . $p . "<BR>\n";
>       } else {
>               if ( ! $IsValid )       return;
>               echo "error, *is* a valid $type: " . $p . "<BR>\n";
>       }
> }
>
> function TestDatesNumbers() {
>
>       echo "The test is sucessful if nothing else gets printed below
> this.<BR>\n";
>
>       // x1F = cc
>       // x20 = space
>       // x21 = !
>       // ...
>       // x7D = }
>       // x7E = ~
>       // x7F = cc
>
>       TestVF("string","IsValidString",TRUE,   "");
>       TestVF("string","IsValidString",TRUE,   "asdfasdf");
>       TestVF("string","IsValidString",FALSE,  "asdf\nasdf");
> // contains \n
>       TestVF("string","IsValidString",FALSE,  "abcd" . chr(0)
> . "asdf");
> // contains chr(0)
>       TestVF("string","IsValidString",FALSE,  "abcd\x1Fasdf");
> // contains cc
>       TestVF("string","IsValidString",TRUE,   "abcd asdf");
>       TestVF("string","IsValidString",TRUE,   "abcd~asdf");
>       TestVF("string","IsValidString",FALSE,  "abcd\x7Fasdf");
> // contains cc
>
>       TestVF("memo","IsValidMemo",TRUE,       "");
>       TestVF("memo","IsValidMemo",TRUE,       "asdfasdf");
>       TestVF("memo","IsValidMemo",TRUE,       "asdf\nasdf");
>       TestVF("memo","IsValidMemo",TRUE,       "asdf\rasdf");
>       TestVF("memo","IsValidMemo",TRUE,       "asdf\r\nnasdf");
>       TestVF("memo","IsValidMemo",FALSE,      "abcd" . chr(0)
> . "asdf");
> // contains chr(0)
>       TestVF("memo","IsValidMemo",FALSE,      "abcd\x1Fasdf");
> // contains cc
>       TestVF("memo","IsValidMemo",TRUE,       "abcd asdf");
>       TestVF("memo","IsValidMemo",TRUE,       "abcd~asdf");
>       TestVF("memo","IsValidMemo",FALSE,      "abcd\x7Fasdf");
> // contains cc
>
>       // digits    / 0-9 :
>
>       TestVF("integer","IsValidInteger",FALSE,        "");
>       //
> blank
>       TestVF("integer","IsValidInteger",TRUE,         "0");
>       TestVF("integer","IsValidInteger",FALSE,        " 0");
>       //
> leading space not allowed
>       TestVF("integer","IsValidInteger",FALSE,        "+0");
>       //
> plus sign not allowed
>       TestVF("integer","IsValidInteger",TRUE,         "-0");
>       TestVF("integer","IsValidInteger",FALSE,        "0+");
>       //
> trailing plus sign not allowed
>       TestVF("integer","IsValidInteger",FALSE,        "0-");
>       //
> trailing minus sign not allowed
>       TestVF("integer","IsValidInteger",TRUE,         "1");
>       TestVF("integer","IsValidInteger",FALSE,        "+1");
>       //
> plus sign not allowed
>       TestVF("integer","IsValidInteger",TRUE,         "-1");
>       TestVF("integer","IsValidInteger",FALSE,        "1+");
>       //
> trailing plus sign not allowed
>       TestVF("integer","IsValidInteger",FALSE,        "1-");
>       //
> trailing minus sign not allowed
>       TestVF("integer","IsValidInteger",TRUE,         "11");
>       TestVF("integer","IsValidInteger",FALSE,        "+11");
>       //
> plus sign not allowed
>       TestVF("integer","IsValidInteger",TRUE,         "-11");
>       TestVF("integer","IsValidInteger",FALSE,        "11+");
>       //
> trailing plus sign not allowed
>       TestVF("integer","IsValidInteger",FALSE,        "11-");
>       //
> trailing minus sign not allowed
>       TestVF("integer","IsValidInteger",FALSE,        "+-1");
>       //
> plus sign not allowed
>       TestVF("integer","IsValidInteger",FALSE,        "-+1");
>       //
> plus sign not allowed
>       TestVF("integer","IsValidInteger",FALSE,        "1+-");
>       //
> plus sign not allowed
>       TestVF("integer","IsValidInteger",FALSE,        "1-+");
>       //
> plus sign not allowed
>       TestVF("integer","IsValidInteger",FALSE,        "1+1");
>       //
> plus sign not allowed
>       TestVF("integer","IsValidInteger",FALSE,        "1-1");
>       //
> minus sign must be leftmost character
>       TestVF("integer","IsValidInteger",FALSE,        "1o1");
>       // o
> not allowed
>       TestVF("integer","IsValidInteger",TRUE,
> "243095230982340982360923460972362356236");
>       TestVF("integer","IsValidInteger",TRUE,
> "-243095230982340982360923460972362356236");
>       TestVF("integer","IsValidInteger",FALSE,        "
> -243095230982340982360923460972362356236");   // leading
> space not allowed
>       TestVF("integer","IsValidInteger",FALSE,
> "3214532.43");        //
> decimal point not allowed in an integer
>       TestVF("integer","IsValidInteger",FALSE,        "/32");
>       //
> contains /
>       TestVF("integer","IsValidInteger",TRUE,         "0");
>       TestVF("integer","IsValidInteger",TRUE,         "9");
>       TestVF("integer","IsValidInteger",FALSE,        ":");
>       //
> contains :
>
>       TestVF("real","IsValidReal",FALSE,      "");            // blank
>       TestVF("real","IsValidReal",FALSE,      "0");           // no
> decimal point
>       TestVF("real","IsValidReal",FALSE,      "1");           // no
> decimal point
>       TestVF("real","IsValidReal",TRUE,       "1.1");
>       TestVF("real","IsValidReal",FALSE,      "1.");
> // no digit
> to the right of decimal point
>       TestVF("real","IsValidReal",FALSE,      ".1");
> // no digit
> to the left of decimal point
>       TestVF("real","IsValidReal",FALSE,      "-1");          // no
> decimal point
>       TestVF("real","IsValidReal",TRUE,       "-1.1");
>       TestVF("real","IsValidReal",FALSE,      " -1.1");
> // leading
> space not allowed
>
>       TestVF("date","IsValidDate",FALSE,      "");            // blank
>       TestVF("date","IsValidDate",TRUE,       "2000-05-24");
>       TestVF("date","IsValidDate",FALSE,      "sdghsdh");
> // contains
> alpha characters
>       TestVF("date","IsValidDate",FALSE,      "4/5/98");
> // contains
> slashes
>       TestVF("date","IsValidDate",FALSE,      "2000-9-7");    // not
> YYYY-MM-DD format
>       TestVF("date","IsValidDate",TRUE,       "2000-09-07");
>       TestVF("date","IsValidDate",FALSE,      "2000-09-31");
> // 30 days
> has september
>       TestVF("date","IsValidDate",FALSE,      "2000-09-00");
> // day must
> be 01 thru 31
>       TestVF("date","IsValidDate",FALSE,      "2000-19-07");  // month
> must be 01 thru 12
>       TestVF("date","IsValidDate",FALSE,      "2000-00-00");
> // non-valid
> month and day
>       TestVF("date","IsValidDate",FALSE,      "2000-01-32");
> // day must
> be 01 thru 31
>       TestVF("date","IsValidDate",TRUE,       "2000-02-28");
>       TestVF("date","IsValidDate",TRUE,       "2000-02-29");
>       TestVF("date","IsValidDate",FALSE,      "2000-02-30");
> // days in
> feb must be 01 thru 29
>       TestVF("date","IsValidDate",TRUE,       "1999-02-28");
>       TestVF("date","IsValidDate",FALSE,      "1999-02-29");
> // 1999 was
> not a leap year
>       TestVF("date","IsValidDate",FALSE,      "1999-02-30");
> // days in
> feb must be 01 thru 29
>
>       TestVF("time","IsValidTime",FALSE,      "");            // blank
>       TestVF("time","IsValidTime",TRUE,       "20:05:24");
>       TestVF("time","IsValidTime",FALSE,      "sdghsdh");
> // contains
> alpha characters
>       TestVF("time","IsValidTime",FALSE,      "4/5/98");
> // contains
> slashes
>       TestVF("time","IsValidTime",FALSE,      "20:9:7");      // not
> HH:MM:SS format
>       TestVF("time","IsValidTime",TRUE,       "20:09:07");
>       TestVF("time","IsValidTime",FALSE,      "24:09:07");
> // hour must
> be 00 thru 23
>       TestVF("time","IsValidTime",FALSE,      "20:60:07");
> // minute
> must be 00 thru 59
>       TestVF("time","IsValidTime",FALSE,      "20:07:60");
> // second
> must be 00 thru 59
>
>       TestVF("datetime","IsValidDateTime",FALSE,      "");
> // blank
>       TestVF("datetime","IsValidDateTime",TRUE,       "2000-06-06
> 20:05:24");
>       TestVF("datetime","IsValidDateTime",FALSE,      "2000-06-06
> 20:05:24");   // 2 spaces between date and time
>       TestVF("datetime","IsValidDateTime",FALSE,
> "2000-06-0620:05:24");                // 0 spaces between
> date and time
>       TestVF("datetime","IsValidDateTime",FALSE,      "2000-06-6
> 20:05:24");           // non-valid date format
>       TestVF("datetime","IsValidDateTime",FALSE,      "2000-06-06
> 20:5:24");            // non-valid time format
>       TestVF("datetime","IsValidDateTime",FALSE,      "2000-06-06");
> // time missing
>       TestVF("datetime","IsValidDateTime",FALSE,      "20:05:24");
> // date missing
>       TestVF("datetime","IsValidDateTime",FALSE,      "20:05:24
> 2000-06-06");         // date and time order reversed
>
>       TestVF("timestamp","IsValidTimeStamp",FALSE,    "");
> // blank
>       TestVF("timestamp","IsValidTimeStamp",TRUE,
> "20000606200524");
>       TestVF("timestamp","IsValidTimeStamp",FALSE,
> "2000066200524");
> // non-valid date format
>       TestVF("timestamp","IsValidTimeStamp",FALSE,
> "2000060620524");
> // non-valid time format
>       TestVF("timestamp","IsValidTimeStamp",FALSE,    "20000606");
> // time missing
>       TestVF("timestamp","IsValidTimeStamp",FALSE,    "200524");
> // date missing
>       TestVF("timestamp","IsValidTimeStamp",FALSE,
> "20052420000606");
> // date and time order reversed
>
>       TestVF("boolean","IsValidBoolean",FALSE,        "");
>       //
> blank
>       TestVF("boolean","IsValidBoolean",TRUE,         "true");
>       TestVF("boolean","IsValidBoolean",TRUE,         "false");
>       TestVF("boolean","IsValidBoolean",TRUE,         "TRUE");
>       TestVF("boolean","IsValidBoolean",TRUE,         "FALSE");
>       TestVF("boolean","IsValidBoolean",FALSE,        "t");
>       //
> must be 'true' or 'false'
>       TestVF("boolean","IsValidBoolean",FALSE,        "f");
>       //
> ditto
>       TestVF("boolean","IsValidBoolean",FALSE,        "0");
>       //
> ditto
>       TestVF("boolean","IsValidBoolean",FALSE,        "1");
>       //
> ditto
>
>       // uncomment the next 2 to test TestVF()
> //    TestVF("boolean","IsValidBoolean",TRUE,         "1");
>       //
> ditto
> //    TestVF("boolean","IsValidBoolean",FALSE,
> "true");      //
> ditto
>
>       echo "done testing.\n";
> }
>
> TestDatesNumbers();
>
> ?>
>
>
>
> -----Original Message-----
> From: phpman [mailto:[EMAIL PROTECTED]]
> Sent: Sunday, March 18, 2001 1:44 PM
> To: [EMAIL PROTECTED]
> Subject: [PHP] how do i get a variable type? - not that simple
>
>
> No guys. that doesn't work. Take this code for example...
>
> $a="3";
> echo(gettype($a));
>
> this returns  string
> i need to find it as an integer or real or float for the sql.
> which by the
> way is MySQL.
>
> thank you for responding, but I already know that gettype and
> all the other
> is_*  don't work for this.
>
>
>
> ""phpman"" <[EMAIL PROTECTED]> wrote in message
> 99132e$ol8$[EMAIL PROTECTED]">news:99132e$ol8$[EMAIL PROTECTED]...
> > hello all,
> >
> >  let's say i have this:
> > $a="varone=hello world|vartwo=2.44|varthree=100|";
> >
> > now i do this:
> >
> > $b=explode('|',$a);
> > $z=count($b);
> > for ($x=0;$x<$z;$x++) {
> >     $tmp=explode('=',$b[$x]);
> > ....
> >
> > and i want to find out if  $tmp[1] is a string or an integer (that's
> really
> > all I need to determine so i can put
> > together an SQL statement that puts single quotes around
> strings and none
> > around integers). Obviously
> > i won't know at design time all of the variables and their
> values. Thank
> > you.
> >
> > -dave
> >
> >
> >
> > --
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > To contact the list administrators, e-mail:
> [EMAIL PROTECTED]
> >
>
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> To contact the list administrators, e-mail:
> [EMAIL PROTECTED]
>

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to