# validateparam.class.php

## Description

This class can validate values and arrays.
You define type and validateion rules. A validation method checks the given value against your rules. It returns the error message(s). No error means, the value is ok.

## Usage

```php

$oVal=new validateparam();

// check an array
$aErrors=$oVal->validateArray($aRules, $aGivenValues, $bStrict);
if(count($aErrors)){
    echo "Something is wrong: <pre>".print_r($aErrors, 1)."</pre>";
    exit(1);
}
```

## Validate Arrays

First something visual - an example:

```txt
Array
(
    [name] => Array
        (
            [type] => string
            [required] => true
            [regex] => /./
        )

    [description] => Array
        (
            [type] => string
            [required] => true
            [regex] => /./
        )
        :
    [worstresult] => Array
        (
            'type' => 'int',
            'required' => false,
            'description' => 'A failed check is max counted as given result. Use it on not required but optional checks',
            'min'=>RESULT_OK,
            'max'=>RESULT_ERROR,
        )
)
```


### Type check

Each key can be marked to be a value of a given type.

It can be a mandantory value or optional.

| Name       | Type       | Description
|--          |--          |--
| 'type'     | {string}   | variable type that must match; one of "array", "bool", "count", "float", "int", "integer", "string"
| 'required' | {bool}     | define value as required

Next to these keys per type you can define validation rules in dependency of the type.

### Validate numbers

This section describes values of the `type`

* int|integer - integer values
* float - float values (or integer)

Values you can verify if it is in a wanted range.

| Name       | Type         | Description
|--          |--            |--
| 'min'      | {float\|int} | allowed minimum value
| 'max'      | {float\|int} | allowed maximum value
| 'oneof'    | {array}      | value must match one of the given values

### Validate string

Values of type "string" can be verified

* against a given regex
* with a set of allowed values

| Name       | Type         | Description
|--          |--            |--
| 'regex'    | {string}     | value must match given regex
| 'oneof'    | {array}      | value must match one of the given values

### Validate with presets

In the file *validateparam.settings.php* you can put presets and their validation rules for elements that repeat.

```php
<?php
/*

    validation rules 
    if a param has the key 'validate' that matches a key then its values will
    be added for validation.

    SYNTAX

    KEY - value for'validate' key
    VALUE - array with these possible keys
            - type  - set a type
            - regex - define a regex for type sting
            - min, max - range for types float and int
            - oneof
*/


return [
    'hostname'   => [ 'type' => 'string', 'regex' => '/^[a-z0-9\_\-\.]/i'],
    'portnumber' => [ 'type' => 'int',    'min' => 0, 'max' => 65535],
    'website'    => [ 'type' => 'string', 'regex' => '/https?:\/\//'],
];
```

```txt
[port] => Array
    (
        [type] => int
        [required] => true
        [validate] => portnumber
    )
```