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]