|
|
|
|
|
|
|
|
|
| |
|
<?
/*
* @package User defining typification in PHP
* @author $Author: sheiko $
* @version $Id: typification.php,v 1.0 2005/09/29 15:58:15 sheiko Exp $
* @since v.1.0
* @copyright (c) Dmitry Sheiko http://www.cmsdevelopment.com
*/
class FuncParams {
var $patternCounter;
var $Fault;
var $ErrorMessage;
/**
* Class constructor
* @param string $Commands - a string with validation patterns
* @param string $ParamValuesArray parameters values array
* @return object
*/
function FuncParams($Commands, $ParamValuesArray) {
$this->patternCounter = 0;
$this->Fault = False;
$this->ErrorMessage = '';
$this->Validate($Commands, $ParamValuesArray);
return $this;
}
/**
* Set error triggers
* @param string $ErrorMessage error message
* @return mixed
*/
function trigger_error($ErrorMessage) {
$this->Fault = True;
$this->ErrorMessage = $ErrorMessage;
}
/**
* String type validation
* @param string $a_pattern pattern for validation
* @param string $a_value value for validation
* @return mixed
*/
function is_string( $a_pattern, $a_value ) {
$range = array();
if( !is_string($a_value)) $this->trigger_error("Parameter No.".$this->patternCounter." must be a String");
if( preg_match("/^.*\{.*\}/is", trim($a_pattern)) ) {
list($range["left"], $range["right"]) = split(",", preg_replace("/^.*\{(.*)\}$/is", "\\1", $a_pattern));
if(strlen($a_value)<$range["left"] OR strlen($a_value)>$range["right"]) $this->trigger_error("Value of parameter No.".$this->patternCounter." exceeds legal range ".$a_pattern);
}
if( preg_match("/^.*\[.*\]/is", trim($a_pattern)) ) {
$range = split("\|", preg_replace("/^.*\[(.*)\]$/is", "\\1", $a_pattern));
if( !in_array($a_value,$range) ) $this->trigger_error("Value of parameter No.".$this->patternCounter." exceeds legal range ".$a_pattern);
}
}
/**
* Integer type validation
* @param string $a_pattern pattern for validation
* @param string $a_value value for validation
* @return mixed
*/
function is_integer( $a_pattern, $a_value) {
$range = array();
if( !is_integer($a_value)) $this->trigger_error("Parameter No.".$this->patternCounter." must be an Integer");
if( preg_match("/^int.*?\{.*\}/is", trim($a_pattern)) ) {
list($range["left"], $range["right"]) = split(",", preg_replace("/^int.*?\{(.*)\}$/is", "\\1", $a_pattern));
if($a_value<$range["left"] OR $a_value>$range["right"]) $this->trigger_error ("Value of parameter No.".$this->patternCounter." exceeds legal range ".$a_pattern);
}
if( preg_match("/^.*\[.*\]/is", trim($a_pattern)) ) {
$range = split("\|", preg_replace("/^.*\[(.*)\]$/is", "\\1", $a_pattern));
if( !in_array($a_value,$range) ) $this->trigger_error("Value of parameter No.".$this->patternCounter." exceeds legal range ".$a_pattern);
}
}
/**
* Array type validation
* @param string $a_pattern pattern for validation
* @param string $a_value value for validation
* @return mixed
*/
function is_array( $a_pattern, $a_value ) {
$range = array();
if( !is_array($a_value)) $this->trigger_error ("Parameter No.".$this->patternCounter." must be an Array");
if( preg_match("/^array\{.*\}/is", trim($a_pattern)) ) {
$range = split(",", preg_replace("/^array\{(.*)\}$/is", "\\1", $a_pattern));
if(count($a_value)!=$range[0]) $this->trigger_error("Value of parameter No.".$this->patternCounter." exceeds legal range ".$a_pattern);
}
}
/**
* ArrayOfStrings type validation
* @param string $a_pattern pattern for validation
* @param string $a_value value for validation
* @return mixed
*/
function is_ArrayOfStrings( $a_pattern, $a_value) {
$range = array();
if( !is_array($a_value)) $this->trigger_error("Parameter No.".$this->patternCounter." must be an array of strings");
if($a_value) {
foreach($a_value as $val) {
if(gettype($val)!="string") $this->trigger_error("Parameter No.".$this->patternCounter." contains an illegal value (not string)");
}
}
if( preg_match("/^ArrayOfStrings\{.*\}/is", trim($a_pattern)) ) {
$range = split(",", preg_replace("/^ArrayOfStrings\{(.*)\}$/is", "\\1", $a_pattern));
if(count($a_value)!=$range[0]) $this->trigger_error("Value of parameter No.".$this->patternCounter." exceeds legal range ".$a_pattern);
}
}
/**
* Validator
* @param string $Commands - a string with validation patterns
* @param string $ParamValuesArray parameters values array
* @return mixed
*/
function Validate($Commands, $ParamValuesArray) {
$patternsArr = array();
$a_pattern = "";
$a_value = 0;
$key = "";
if( !is_string($Commands) OR !$Commands) trigger_error ("Incorrect FuncParams parameter", E_USER_ERROR);
if( !is_array($ParamValuesArray) ) trigger_error ("Incorrect ParamValuesArray parameter", E_USER_ERROR);
$patternsArr = split(";", trim($Commands));
if($patternsArr) {
foreach($patternsArr as $a_pattern) {
$a_value = $ParamValuesArray[(++$this->patternCounter-1)];
if(!$a_pattern) break;
if( preg_match("/^\*/is", trim($a_pattern)) ) break;
if( preg_match("/^ArrayOfStrings/is", trim($a_pattern)) ) $this->is_ArrayOfStrings(trim($a_pattern), $a_value);
if( preg_match("/^string/is", trim($a_pattern)) ) $this->is_string(trim($a_pattern), $a_value);
if( preg_match("/^int/is", trim($a_pattern)) ) $this->is_integer(trim($a_pattern), $a_value);
if( preg_match("/^array/is", trim($a_pattern)) ) $this->is_array(trim($a_pattern), $a_value);
if($this->Fault) return False;
}
}
return True;
}
}
// Example:
// Options of types specifing are similar Regular Expressions:
// type_of_value{left_limit,right_limit}[posible_value1|posible_value2]; ..
class Sample {
function Sample() {
$values = &func_get_args();
$p = new FuncParams("string{0,3}[abc|bbc]; integer; array{2}; ArrayOfStrings", $values);
if($p->Fault) trigger_error ($p->ErrorMessage . ". Function <i>'" . __FUNCTION__ . "'.</i>", E_USER_ERROR);
print "PASS";
}
}
$r = new Sample('abc', 2, array(1,2), array("123","ABC"));
?> | | |
|
| EasyPhpThumbnail Class - The EasyPhpThumbnail class allows you to generate thumbnails and handle image manipulation for GIF, JPG and PNG on-the-fly. Categories : PHP, PHP Classes, Object Oriented, Graphics, GD image library | | | Access_user Class - an easy to use system for protecting pages and register users. Categories : PHP, Classes and Objects, Object Oriented, PHP Classes, Authentication | | | SPL and ITERATOR : examples Categories : PHP, Object Oriented, PHP Classes, Sessions | | | An updated OOP - Inheritance Categories : PHP, PHP Classes, Object Oriented | | | My Box - PHP Class that calculates the volumetric weight of a package.
Categories : PHP, Object Oriented, PHP Classes, Beginner Guides, Payment Gateways | | | Advanced Image WaterMarker Categories : PHP, PHP Classes, GD image library, Graphics, Object Oriented | | | Football News Aggregator Categories : PHP, Object Oriented, PHP Classes, Rich Site Summary (RSS), HTML and PHP | | | XPath for PHP without the DOM XML extension Categories : DOM XML, XML, XSLT, PHP Classes, PHP | | | Convert SQL from oracle,mysql,mssql,sqlite and odbc to SQL compatible Categories : PHP, PHP Classes, Databases, MySQL, MS SQL Server | | | STR - a Perl-like string manipulator class - The str class provides 4 perl-like methods for manipulating strings and
other scalar variables. Categories : PHP, PHP Classes, Perl, Strings | | | Email Class Categories : PHP, Mail, PHP Classes | | | SQLite PHP Database Wrapper Categories : PHP, PHP Classes, Databases, SQLite, Beginner Guides | | | [PHP5] PHP Debugger and Helper Categories : PHP, PHP Classes, Errors and Logging, Debugging, XML | | | Powerful php/mysql Pagination for up to 6 URL Params Categories : PHP, PHP Classes, Databases, MySQL, Navigation | | | Generate FDF files without the pdftk library or php extension. Categories : PHP, PHP Classes, PDF | |
| |
| |
|