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]

Reply via email to