RE: [PHP] how do i get a variable type? - not that simple

From: Date: Mon, 19 Mar 2001 13:37:36 +0000
Subject: RE: [PHP] how do i get a variable type? - not that simple
Groups: php.general 
Request: Send a blank email to php-general+get-44535@lists.php.net to get a copy of this message
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:info@graphicon.nu] Sent: Sunday, March 18, 2001 1:44 PM To: php-general@lists.php.net 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"" <info@graphicon.nu> wrote in message news:99132e$ol8$1@toye.p.sourceforge.net... > 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: php-general-unsubscribe@lists.php.net > For additional commands, e-mail: php-general-help@lists.php.net > To contact the list administrators, e-mail: php-list-admin@lists.php.net >

« previous php.general (#44535) next »